Форум программистов, компьютерный форум, киберфорум
Arduino
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 19.06.2020
Сообщений: 63
1

Передача данных через ком порт

18.07.2020, 22:21. Просмотров 1344. Ответов 23
Метки нет (Все метки)

Здравствуйте...Нужна помощь...не могу понять как через com port отправить массив состояния выводов (High/Low) .Кто сталкивался с этим или же знает как написать такой код помогите пожалуйста.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.07.2020, 22:21
Ответы с готовыми решениями:

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

Ком-порт
Поскажите пожалуйста, в ноуте нет ком -пора приобрел Экспресс карта RS232 адаптер 34 мм для...

100 бит информации, ком-порт и Mega8
Привет, собственно такая вот у меня задачка, есть мега8 и есть ком-порт, подключенный к компу. С...

Приём передача данных через ком порт
Здравствуйте.Я ещё на стадии обучения программирования на С#...Нужна ваше помощь!)...

23
0 / 0 / 0
Регистрация: 29.07.2020
Сообщений: 5
29.07.2020, 10:17 21
Цитата Сообщение от Umidjon Посмотреть сообщение
но не знаю как отправлять с ардуино на комп пакет
C++
1
2
3
4
5
6
7
Serial.begin(9600);
 
Serial.print(S);
Serial.write(buf);
Serial.print(int); 
 
Serial.println(int);
Добавлено через 6 минут
Все что вы предлагаете выглядит не правоподобно!

Когда я занималась разработкой пробной прошивки для коммерческой платы, как раз arduino ide (mikro c) использовала для написания кода, просто быстро для теста сойдет. То практика показала что нужно отправлять именно аббревиатуры команд то есть например мы хотим включить что то пусть это будет команда ON то нужно добавить еще контрольные символы например так &ON^, дело в том что при передачи данных данные могут быть потеряны, а прошивка должна получать команды гарантировано. А дальше по условию

C
1
2
swich (команда == "ON")
  Включить лампу
0
Эксперт .NET
6860 / 4464 / 1072
Регистрация: 25.05.2015
Сообщений: 13,643
Записей в блоге: 13
29.07.2020, 10:25 22
В бинарном протоколе есть контрольная сумма. Если принято что-то с неправильной суммой, оно отбрасывается.
А вот принять команду, часть которой потеряна, и в любом случае выполнить её - чревато проблемами.
0
0 / 0 / 0
Регистрация: 19.06.2020
Сообщений: 63
29.07.2020, 11:59  [ТС] 23
Не знаю на сколько эффективен мой пакет но я как мог так и написал...И мне интересен ваше мнение о коде...Можно ли использовать такой подход? Код передачи пакета состояния пинов с ардуино на комп(С#):

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
unsigned char buf[14];  // создал массив 
 
void setup()
{
 Serial.begin(9600);
 for (int i = 0; i < 12; ++i)
 {
  pinMode((i + 2),INPUT_PULLUP);  // настроил пины 2-13 на вход
 }
  
}
 
void loop()
{
 for (int i = 0; i < 12; ++i)
 {
  buf[i + 1] = digitalRead(i + 2) ? 48 : 49; // записываю состояние пинов (HIGH;LOW) на массив начиная со второго элемента
 }
 buf[0]='#'; // а первый элемент массива...это знак начало пакета
 buf[13]='$'; //а это последный элемент массива...это знак конца пакета 
  
 Serial.write(buf, sizeof(buf)); //отправляю элементы массива на комп
 
 delay(1000);
}
Добавлено через 1 минуту
Код обработки пакета на стороне компа (C#)

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
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            if (serialPort1.BytesToRead >= 14)  // если больше либо равно 14 байтам
            {
                int length = serialPort1.BytesToRead;
                char[] buffer = new char[length];
                serialPort1.Read(buffer, 0, length); // записать пакет на массив
 
                new Thread(() =>
                {
                    Invoke((MethodInvoker)(() =>
                    {
                        if (Convert.ToChar(buffer[0])=='#' && (Convert.ToChar(buffer[13]))=='$') // если первый элемент (начало) равен '#' и конец равен'$' то можно считать что пакет целый
                        {
                            switch ((Convert.ToChar(buffer[1])))
                            {
                                case '1': this.pictureBox.Image = global::Станция.Properties.Resources.monevr_pch_green;break; // если на первом пине HIGH то показать картинку
                                case '0': this.pictureBox.Image = null; break; // если на первом пине LOW не показывать картинку
                            }
                        }
                        
 
                    }));
                }).Start();
 
            }
        }
0
Эксперт .NET
6860 / 4464 / 1072
Регистрация: 25.05.2015
Сообщений: 13,643
Записей в блоге: 13
29.07.2020, 14:14 24
Состояние пина это 1 бит. Вы же под него отводите аж 8 бит.

На ПК данные можно постоянно принимать и обновлять в буфере.
А по таймеру читать буфер и обновлять картинки.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.07.2020, 14:14

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Передача данных через ИК порт
Нужно организовать систему передачи данных через инфракрасный на ассемблере. ИК должен...

Передача данных через Com порт
Добрый день форумчане! Мне с помощью программы &quot;free-serial-port-monitor&quot; удалось считал данные,...

Передача данных через com -порт на микроконтроллер
Добрый день. Учусь передавать данные на микроконроллер. Данные передаются по com порту. Почитал...

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

Передача и приём данных через COM порт
Задача такая, нужно через ком порт передавать и принимать пачки байтов, всё это по протоколу modbus...

Получение и передача данных через COM порт
Добрый день Мне кажется, я изобретаю велосипед и должно быть полно примеров такого кода. Но...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.