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

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

18.07.2020, 22:21. Просмотров 1348. Ответов 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
289 / 235 / 131
Регистрация: 08.04.2013
Сообщений: 1,025
20.07.2020, 10:45 2
а в чем проблема :
- отправка в ком порт ( ком порт чей?)
- проблема с отправкой массива данных?
0
0 / 0 / 0
Регистрация: 19.06.2020
Сообщений: 63
20.07.2020, 13:22  [ТС] 3
Нужно создать массив который хранить в себе состояния выводов.В каком выводе высокое напряжение а в каком низкое.
0
289 / 235 / 131
Регистрация: 08.04.2013
Сообщений: 1,025
20.07.2020, 13:49 4
вопрос который порождает новые вопросы. Вы сперва опишите проблему, а не начинайте с предполагаемого варианта вашего решения. Вопрос 1. сколько выводов вы хотите контролировать ? Это уже даст возможные решения, если до 8 портов это байт, если больше несколько байт. В массиве можно хранить информацию, а не передавать.
Начните с малого 8 выводов контроля.
0
0 / 0 / 0
Регистрация: 19.06.2020
Сообщений: 63
20.07.2020, 14:13  [ТС] 5
Хочу контролировать 56 выводов ардуино мега...И передать эти значения через ком порт в программу с графическим интерфейсом (c#) для индикации элементов подключённых к ардуино
0
2573 / 1165 / 152
Регистрация: 28.10.2011
Сообщений: 4,135
Записей в блоге: 6
20.07.2020, 15:08 6
В чем проблема?
Создаете массив по количеству портов в МК. Читаете данные с порта в массив. Отправляете массив про USART.
0
289 / 235 / 131
Регистрация: 08.04.2013
Сообщений: 1,025
20.07.2020, 18:39 7
56 уместится в 7 байт
0
0 / 0 / 0
Регистрация: 19.06.2020
Сообщений: 63
20.07.2020, 19:08  [ТС] 8
А как вы рассчитали это?
0
289 / 235 / 131
Регистрация: 08.04.2013
Сообщений: 1,025
20.07.2020, 22:45 9
Лучший ответ Сообщение было отмечено Umidjon как решение

Решение

7 байт * 8 бит = 56 портов можно контролировать. 00001111 - 5,6,7,8 порта в состоянии High
1
0 / 0 / 0
Регистрация: 19.06.2020
Сообщений: 63
20.07.2020, 23:11  [ТС] 10
Понятно...спасибо вам

Добавлено через 6 минут
У меня ещё один вопрос...как можно организовать пакет обмена между ардуино и пк? Я прочитал статью что у пакета должен быть начало,команда,данные, и конец. Что таким образом не будет ложного срабатывания...что так надёжнее...Если знаете как помогите пожалуйста.
0
289 / 235 / 131
Регистрация: 08.04.2013
Сообщений: 1,025
21.07.2020, 00:00 11
В интернете есть статьи по работе с ком портами. Пишется программа на одном известном вам языке для ПК для установки связи и приема - передачи и обработки пакетов. Файл вложил. Код для Ардуины для передачи пакета
0
Вложения
Тип файла: rar CPort.rar (19.2 Кб, 2 просмотров)
0 / 0 / 0
Регистрация: 19.06.2020
Сообщений: 63
21.07.2020, 06:26  [ТС] 12
У вас в архиве прога которая посылает команду на порт...Я сам на c# сделал нужную мне прогу...но не знаю как отправлять с ардуино на комп пакет...Если можете покажите код передачи пакета для ардуино.
0
289 / 235 / 131
Регистрация: 08.04.2013
Сообщений: 1,025
21.07.2020, 07:30 13
Serial.print("12345"); или write() Вы эту команду не знаете ? Если сами уже на с# программу написали для приема передачи, то это от ваших уст уже странно звучит. Из бит сформировать байт и отправить по одному, стопкой это сами решаете
Кликните здесь для просмотра всего текста
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
/*
 Uses a FOR loop for data and prints a number in various formats.
 */
int x = 0;    // variable
 
void setup() {
   Serial.begin(9600);      // open the serial port at 9600 bps:    
}
 
void loop() {  
   // print labels 
   Serial.print("NO FORMAT");       // prints a label
   Serial.print("\t");              // prints a tab
 
   Serial.print("DEC");  
   Serial.print("\t");      
 
   Serial.print("HEX"); 
   Serial.print("\t");   
 
   Serial.print("OCT");
   Serial.print("\t");
 
   Serial.print("BIN");
   Serial.print("\t"); 
 
   for(x=0; x< 64; x++){    // only part of the ASCII chart, change to suit
 
     // print it out in many formats:
     Serial.print(x);       // print as an ASCII-encoded decimal - same as "DEC"
     Serial.print("\t");    // prints a tab
 
     Serial.print(x, DEC);  // print as an ASCII-encoded decimal
     Serial.print("\t");    // prints a tab
 
     Serial.print(x, HEX);  // print as an ASCII-encoded hexadecimal
     Serial.print("\t");    // prints a tab
 
     Serial.print(x, OCT);  // print as an ASCII-encoded octal
     Serial.print("\t");    // prints a tab
 
     Serial.println(x, BIN);  // print as an ASCII-encoded binary
     //                             then adds the carriage return with "println"
     delay(200);            // delay 200 milliseconds
   }
   Serial.println("");      // prints another carriage return
}
0
0 / 0 / 0
Регистрация: 19.06.2020
Сообщений: 63
21.07.2020, 08:52  [ТС] 14
Моя программа сейчас так и работает(сырыми данными). Мне нужно например отправлят команды через протокол Modbus , но так как я раньше не работал с ардуиной мне ещё не приходилось писать такой код. И для начало хотелось посмотреть пример людей кто сталкивался с подобной задачей.
0
Эксперт .NET
6860 / 4464 / 1072
Регистрация: 25.05.2015
Сообщений: 13,645
Записей в блоге: 13
21.07.2020, 10:28 15
Umidjon, вам нужен modbus или
Цитата Сообщение от Umidjon Посмотреть сообщение
Я прочитал статью что у пакета должен быть начало,команда,данные, и конец. Что таким образом не будет ложного срабатывания...что так надёжнее...
?
Modbus не единственный и не лучший.

Добавлено через 1 минуту
Цитата Сообщение от Umidjon Посмотреть сообщение
Хочу контролировать 56 выводов ардуино мега...
А чем именно управляете?
0
0 / 0 / 0
Регистрация: 19.06.2020
Сообщений: 63
21.07.2020, 10:31  [ТС] 16
Управление производится через windows forms c# ...а какие хорошие протоколы есть? Если у вас есть код работы протоколами поделитесь пожалуйста для примера
0
Эксперт .NET
6860 / 4464 / 1072
Регистрация: 25.05.2015
Сообщений: 13,645
Записей в блоге: 13
21.07.2020, 10:43 17
Хороших нет. Есть разработанные кем-то для определённых устройств, есть стандарты, есть дикая дичь.
Протокол выбирают (какой реализовывать), основываясь на том, куда будет подключаться устройство. Это важно для промышленных сетей.
Вам же для дома? Там пофиг. Modbus'ом можно не заморачиваться.

Добавлено через 1 минуту
Цитата Сообщение от Umidjon Посмотреть сообщение
Управление производится через windows forms c#
Не откуда, а куда. Что подключено к выводам ардуины в таком количестве?

Добавлено через 5 минут
Часть примера: https://www.cyberforum.ru/blog... g4973.html
Без непосредственно данных, их надо дописать.
0
0 / 0 / 0
Регистрация: 19.06.2020
Сообщений: 63
22.07.2020, 09:56  [ТС] 18
Если честно я не очень понял как собрать пакет для передачи...Но есть одна идея...например: у меня 50 цифровых входов у которых надо узнать состояние(HIGH/LOW)...нельзя ли просто в начале передать какой-нибудь символ (начало пакета) а потом отправить последовательно состояния всех входов(данные) а в конце отправить символ конца передачи.
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
boolean buf[4];
 
void setup()
{
 Serial.begin(9600);
 pinMode(8, INPUT_PULLUP);
 pinMode(9, INPUT_PULLUP);
 pinMode(10, INPUT_PULLUP);
 pinMode(11, INPUT_PULLUP);
 
}
 
void loop()
{
 buf[0] = !digitalRead(8);
 buf[1] = !digitalRead(9);
 buf[2] = !digitalRead(10);
 buf[3] = !digitalRead(11);
 Serial.print('#');
 
for (int i=0; i < sizeof(buf); i++)
 {
  Serial.print(buf[i]);
 }
 
Serial.print('$');
Что скажите на такой подход?
0
2573 / 1165 / 152
Регистрация: 28.10.2011
Сообщений: 4,135
Записей в блоге: 6
22.07.2020, 11:06 19
Цитата Сообщение от Umidjon Посмотреть сообщение
Что скажите на такой подход?
Используется слишком много памяти.
Читайте в элемент массива весь порт, а не побитово.
Зачем у вас ! перед digitalRead?
0
0 / 0 / 0
Регистрация: 19.06.2020
Сообщений: 63
22.07.2020, 13:13  [ТС] 20
результат digitalRead получается '1' когда на входе ничего нет.Поэтому инвертирую значение.

Добавлено через 1 минуту
Что скажите при таком коде можно надеется на надёжную передачу данных?

Добавлено через 1 час 36 минут
А как читать элемент массива весь порт?...попытался но не смог написать такой код...Покажите пожалуйста такой пример, если можете
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.07.2020, 13:13

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

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

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

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

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

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

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


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

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

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