С Новым годом! Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
20 / 20 / 4
Регистрация: 31.10.2010
Сообщений: 1,240
Записей в блоге: 2

Обмен данными через COM- порт

28.05.2012, 21:16. Показов 4183. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, пытаюсь освоить передачу данных.
Отсылаю на мк скажем "1", приходит "1" и "-38" почему-то. Та же история с другими символами, после каждого "-38" приходит, подскажите почему?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void setup()
{
  //Create Serial Object
  Serial.begin(9600);
}
 
void loop()
{
  //Have the arduino wait to receive input
  while (Serial.available() == 0);
  
  int val = Serial.read() - '0';
    Serial.println(val); 
 
  Serial.flush();
  
  
}
Это скетч, который я прошиваю.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.05.2012, 21:16
Ответы с готовыми решениями:

Обмен данными с COM-портом через интернет
Есть тепловычислитель с COM-портом и программа под windows считывающая с него данные. Необходимо сделать обмен данными между ними через...

Обмен данными между МК через RS-485 (MAX487)
Доброго времени суток. Сразу к делу: В сообщении прикреплено фото и файл исходного кода (AtmelStudio 6) и проект в Proteus 8 Prof. ...

Обмен данными через вай-фай с сервером
Приветствую всех! На данный момент реализовал такую систему: Подключил датчик температуры и влажности к ардуино, данные передаются на...

5
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
28.05.2012, 22:58
...таки вот почему:
C#
1
int val = Serial.read() - '0';
1
20 / 20 / 4
Регистрация: 31.10.2010
Сообщений: 1,240
Записей в блоге: 2
29.05.2012, 07:25  [ТС]
Если оставить просто int val = Serial.read(), то на посланную единицу придет её код "49".
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
29.05.2012, 07:33
...разумеется, ибо вы приводите к типу int.
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
29.05.2012, 07:34
Цитата Сообщение от Костяныч Посмотреть сообщение
"-38"
Это 0xDA(учись работать с шеснадцетиричкой)
скорее всего это перевод строки
0xD 0xA
для полного ответа нужно знать
1 что за микроконтроллер
2 как ты принимаешь поток
3 настроены ли одинаково протоколы
4 что внутри Serial.println(val);

Цитата Сообщение от Костяныч Посмотреть сообщение
Serial.begin(9600);
ты настроил только скорость
а количество бит? есть ли проверка? сколько стоповых?
1
20 / 20 / 4
Регистрация: 31.10.2010
Сообщений: 1,240
Записей в блоге: 2
29.05.2012, 07:49  [ТС]
Использую Arduino Uno код на шарпе:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;
 
namespace ComPort
{
    public partial class Form1 : Form
    {
        SerialPort port;
        Thread readThread;
        public Form1()
        {
            InitializeComponent();
            port = new SerialPort("COM19");//Объявление порта 19
            port.Open();//Подключение к порту 19
            readThread = new Thread(read);//Создание потока для принятия данных
            readThread.Start();//Запуск потока
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            string message = Convert.ToString(textBox1.Text);//Чтение из текстБокса
            port.WriteLine(message);//Отправка на порт данных
            textBox1.Text = null;//Очистка текстБокса
        }
 
        private void read()
        {
            while (true)//Постоянное бействие
            {
                try
                {
                        string mess = port.ReadLine();//Присвоение mess значения с порта
                        this.BeginInvoke(new Action(delegate() { textBox2.Text += mess+"\n"; }));//Вывод в текстБокс2 из другого потока
                }
                catch (TimeoutException) { }
            }
        }
 
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            port.Close();//Зактрытие соединения с портом
            readThread.Abort();//Остановка потока
        }
    }
}
ну а код в мк я уже приводил.
Я новичок, может что делаю не так или дописать надо что-нибудь.
P.s. Планирую его к роутеру на Linux подключить, собственно из-за этого и изучаю сериал соединение.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.05.2012, 07:49
Помогаю со студенческими работами здесь

Обмен данными через UART. Нужен хелп в отловле бага.
Доброго дня уважаемые коллеги. Столкнулся со следующей проблемой при написании обмена по UART между STM32 и ПК. Проблема в следующем -...

Обмен данными через COM порт
Нашел исходник программы для работы с com портом. Какие есть стандартные команды, чтобы получить хоть какой то ответ? А то что бы не...

Обмен данными через COM-порт
Всем доброго времени суток! Подскажите пожалуйста как передать введенные данные из компонента TexBox передать в COM-порт Дело в том что...

Обмен данными через COM порт
Доброго времени суток. Требуется производить обмен данными с неким устройством через СОМ порт. Сейчас использую вот такие функции: ...

Обмен данными с устройством через com-порт
Здравствуйте. Я работаю с Акип'ом и мне нужно считывать с него измерения. Проблема в том, что я не могу получить от него банальное имя,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru