Обмен между двума RS-485

DaDe@list.ru
Offline
Зарегистрирован: 12.11.2019

Добрый день.

Пришли 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));       
      } 
 }

 

b707
Offline
Зарегистрирован: 26.05.2017

Два софтсериала одновременно на уно не работают. Чтобы проверить модули, подключите их к двум разным ардуинам

DaDe@list.ru
Offline
Зарегистрирован: 12.11.2019

А то что он видит объем передаваемых данных, это просто особенность этой неработоспособности?

sadman41
Offline
Зарегистрирован: 19.10.2016

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

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

А касательно софтсериала - он, при передаче, блокирует все прерывания. И даже если второй софтсериал будет interrupt-driven, то хрен он чего получит.

DaDe@list.ru
Offline
Зарегистрирован: 12.11.2019

Спасибо за развернутый ответ.