Обмен между двума 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, то хрен он чего получит.
Спасибо за развернутый ответ.