三个设备中有一个电路:Arduino + RS485 to TTL。其中一个 arduino 充当控件(收集数据)。主 - 始终设置为接收,从 - 侦听器切换为发送,每隔几秒一次。在主设备上,仅从一个设备接收,这将是第一个发送信号的设备。怎么修?我需要从所有 arduino 接收数据,而不仅仅是从第一个及时接收数据。

MASTER
/*
Библиотека для работы с JSON
*/
#include <ArduinoSTL.h>
/*
Библиотека для работы с JSON
*/
#include <ArduinoJson.h>
/*
Контакт 2 переключает режим приёмник/передатчик
*/
#define SerialTxControl 2
#define RS485Transmit HIGH
#define RS485Receive LOW
char buffer[100];
byte state = 0;
/*
Массив для хранения показателей приборов
*/
char *dev[12];
StaticJsonDocument<200> doc;
void setup(void)
{
Serial.begin(9600);
pinMode(13, OUTPUT);
pinMode(SerialTxControl, OUTPUT);
/*
Переключение устройства в режим приёмника
*/
digitalWrite(SerialTxControl, RS485Receive);
while (!Serial)
continue;
}
void loop(void)
{
if (Serial.available())
{
if (Serial.available())
{
String response = Serial.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();
}
}
}
SLAVE
/*
Библиотека для работы с JSON
*/
#include <ArduinoJson.h>
/*
Контакт 2 переключает режим приёмник/передатчик
*/
#define SerialTxControl 2
#define RS485Transmit HIGH
#define RS485Receive LOW
/*
Номер устройства
*/
#define ID "1"
StaticJsonDocument<200> doc;
void setup(void)
{
Serial.begin(9600);
pinMode(SerialTxControl, OUTPUT);
/*
Переключение устройства в режим передатчика
*/
digitalWrite(SerialTxControl, RS485Receive);
while (!Serial)
continue;
}
void loop(void)
{
digitalWrite(SerialTxControl, RS485Transmit);
doc["device"] = ID;
doc["temperature"] = String(random(24, 26));
doc["is_locked"] = random(0, 1);
String(serializeJson(doc, Serial));
digitalWrite(SerialTxControl, RS485Receive);
delay(4000);
}
在 RS485 中,一次只能有一个发射器。因此,工作算法大致如下:
master:切换到发送模式向特定设备发送请求切换到接收模式接收数据
client (permanent waiting) Received a request 是否为他检查此请求。如果他,则切换到传输模式,发送数据,切换到接收模式。
正在广播传输