Обмен между двума RS-485
- Войдите на сайт для отправки комментариев
Вс, 05/07/2020 - 12:45
Добрый день.
Пришли 2 модуля RS-485. Хотел проверить их работу.
Подключил 2 модуля к UNO, соединил эти модули между собой. Передаю 3 байта с одного на второй.
На втором вижу 3 переданных байта, но при чтении там пустота.
Как так может быть?
#include <SoftwareSerial.h> // создание экземпляра на RX-3, TX-2 SoftwareSerial RS485Serial(3, 2); SoftwareSerial RS485Serial2(5, 4); // пин подключения выводов RE и DE // конвертирующего модуля (выбор передача/получение) const int PIN_DIR = 6; const int PIN_DIR2 = 7; boolean sendmsg = false; void setup(){ pinMode(PIN_DIR,OUTPUT); pinMode(PIN_DIR2,OUTPUT); // в режим приемника digitalWrite(PIN_DIR, HIGH); digitalWrite(PIN_DIR2, LOW); // запуск последовательного порта Serial.begin(9600); // запуск SoftwareSerial RS485Serial.begin(9600); RS485Serial2.begin(9600); Serial.println("Start!"); } void loop() { if (analogRead(0)>1 and sendmsg==false) { sendmsg=true; Serial.println("Sending 123"); RS485Serial.print("123"); } if (RS485Serial.available() > 0) { Serial.println("получить байт"); // получить байт char c = RS485Serial.read(); } int count=RS485Serial2.available(); if ( count > 0) { // получить байт char c2 = RS485Serial2.read(); Serial.println(c2); Serial.println("получено "+String(count)+" "+String(c2)); } }
Два софтсериала одновременно на уно не работают. Чтобы проверить модули, подключите их к двум разным ардуинам
А то что он видит объем передаваемых данных, это просто особенность этой неработоспособности?
Прежде всего - подключайте модули рекомендованным образом, а потом уже переходите к извращениям. Потому что гадать почему вы не можете прыгнуть через себя с подвывертом - никто не собирается.
Подключили к двум железным сериалам, проверили. Работает - переходите к своим свофтсериалам и начинаете исследовать что и почему он там выдаёт и почему оно не соответствует ожиданиям.
А касательно софтсериала - он, при передаче, блокирует все прерывания. И даже если второй софтсериал будет interrupt-driven, то хрен он чего получит.
Спасибо за развернутый ответ.