ARDUINO+RS485 данные от двух устрйств (SoftwareSerial)
Подключаю к arduino nano два RS485(TTL to RS485), с помощью библиотеки SoftwareSerial считываю данные. Мне необходимо получать данные от двух устройств, но код работает только тогда, когда присутствует либо RS485, либо RS485_2 (по очереди коментировал блоки кода: начиная с *.listen()). Данные приходят только с одного устройства.
Ожидаемый результат, например:
11:01 - Устройство 1: Какие-то данные.
11:02 - Устройство 2: Какие-то данные.
11:03 - Устройство 1: Какие-то данные.
11:04 - Устройство 2: Какие-то данные.
#include <ArduinoSTL.h>
#include <SoftwareSerial.h>
SoftwareSerial RS485(10, 11); // RX, TX
SoftwareSerial RS485_2(0, 1); // RX, TX
#include <ArduinoJson.h>
#define SerialTxControl 2
#define SerialTxControl2 7
#define RS485Transmit HIGH
#define RS485Receive LOW
char buffer[100];
byte state = 0;
char *dev[12];
StaticJsonDocument<200> doc;
void setup(void)
{
RS485.begin(9600);
RS485_2.begin(9600);
Serial.begin(9600);
pinMode(13, OUTPUT);
pinMode(SerialTxControl, OUTPUT);
pinMode(SerialTxControl2, OUTPUT);
digitalWrite(SerialTxControl, RS485Receive);
digitalWrite(SerialTxControl2, RS485Receive);
while (!Serial)
continue;
}
void loop(void)
{
RS485.listen();
if (RS485.isListening()) {
if (RS485.available())
{
if (RS485.available())
{
String response = RS485.readString();
DeserializationError error = deserializeJson(doc, response);
if (error)
{
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.c_str());
return;
}
const char *device = doc["device"];
String temperature = doc["temperature"];
int is_locked = doc["is_locked"];
Serial.print("Device: " + String(device) + " | ");
Serial.print("Temperature: " + temperature + " | ");
Serial.print("Is locked: " + String(is_locked) + " | ");
Serial.println();
}
}
}
RS485_2.listen();
if (RS485_2.available())
{
if (RS485_2.available())
{
String response = RS485_2.readString();
DeserializationError error = deserializeJson(doc, response);
if (error)
{
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.c_str());
return;
}
const char *device = doc["device"];
String temperature = doc["temperature"];
int is_locked = doc["is_locked"];
Serial.print("Device: " + String(device) + " | ");
Serial.print("Temperature: " + temperature + " | ");
Serial.print("Is locked: " + String(is_locked) + " | ");
Serial.println();
}
}
delay(1000);
}