У нас имеется передатчик с подключённой кнопкой и приёмник со светодиодом, посмотрите у меня где могут быть ошибки: передатчик: #include <SoftwareSerial.h> #define SSerialRX 0 //Serial Receive pin #define SSerialTX 1 //Serial Transmit pin #define SSerialTxControl 10 //RS485 Direction control #define button 7 #define RS485Transmit HIGH #define RS485Receive LOW SoftwareSerial RS485Serial(SSerialRX, SSerialTX); // RX, TX int byteReceived; int byteSend; void setup() { // Start the built-in serial port, probably to Serial Monitor Serial.begin(9600); pinMode(button, INPUT); pinMode(SSerialTxControl, OUTPUT); digitalWrite(SSerialTxControl, RS485Transmit); RS485Serial.begin(4800); } void loop() { if (Serial.available()) { byteReceived = digitalRead(button); digitalWrite(SSerialTxControl, RS485Transmit); RS485Serial.write(byteReceived); delay(10); } } приёмник: #include <SoftwareSerial.h> #define SSerialRX 0 #define SSerialTX 1 #define SSerialTxControl 10 #define RS485Transmit HIGH #define RS485Receive LOW #define Pin13LED 3 SoftwareSerial RS485Serial(SSerialRX, SSerialTX); // RX, TX int byteReceived; int byteSend; void setup() { Serial.begin(9600); pinMode(Pin13LED, OUTPUT); pinMode(SSerialTxControl, OUTPUT); digitalWrite(SSerialTxControl, RS485Receive); RS485Serial.begin(4800); } void loop() { //Copy input data to output if (RS485Serial.available()) { byteSend = RS485Serial.read(); digitalWrite(Pin13LED, HIGH); delay(10); digitalWrite(Pin13LED, LOW); digitalWrite(SSerialTxControl, RS485Transmit); RS485Serial.write(byteSend); delay(10); digitalWrite(SSerialTxControl, RS485Receive); } }
Лично у меня подход с SoftwareSerial очень криво работал. Подключайте лучше к аппаратным пинам UART и используйте родной объект Serial....... Да, придется отключать устройство MAX485 каждый раз при перепрошивке, но работать должно стабильнее