Проблема связи между arduino UNO R3 и Mega 2560 через MAX485
Я хочу отправить данные между Arduino Uno и Mega через MAX485.
Когда я устанавливаю вывод данных Enable на HIGH на Mega (для передачи данных) и устанавливаю тот же вывод на UNO на LOW (для приема данных), я могу правильно считывать данные из Mega в Uno. Однако, когда я хочу сделать это наоборот (отправить данные из uno в мега), не может получить данные из Uno в Mega. Пробовал разные контакты на обеих досках, но ответа пока нет.
Эта проблема возникает, когда я хочу изменить данные. Включение контактов в низкий или высокий внутренний цикл (), я имею в виду, когда я использую, например, Uno как постоянный мастер и мега в качестве постоянного подчиненного, он работает правильно, но когда я пытаюсь изменить их от ведомого до мастера во время выполнения, данные не могут быть отправлены из uno в мега!
PS: Я новичок на RS485 и MAX485. Вот мой код на стороне MEGA:
#include <SoftwareSerial.h>'
SoftwareSerial mySerial(2, 3);
String inputS = "";
boolean stringComplete = false;
int i = 0;
bool b= false;
void setup() {
mySerial.begin(9600);//Using SoftwareSerial Port
Serial.begin(9600);
pinMode(8, OUTPUT);//DE/RE Controling pin of RS-485
digitalWrite(8, HIGH);//DE/RE=HIGH Transmit Enabled M1
}
void loop() {
mySerial.println("MEGA:Hi");
Serial.println("Hi Sent");
digitalWrite(8, LOW);
CheckAndReceive();
if(stringComplete)
{
stringComplete = false;
inputS.trim();
Serial.print(inputS);
Serial.println(": " + String(i++));
inputS = "";
}
digitalWrite(8, HIGH);
delay(1000);
}
void CheckAndReceive()
{
while (mySerial.available()) {
// get the new byte:
char inChar = (char)mySerial.read();
// add it to the inputString:
inputS += inChar;
// if the incoming character is a newline, set a flag
// so the main loop can do something about it:
if (inChar == '\n') {
stringComplete = true;
}
}
}
Этот код должен отправить строку в UNO и прослушать ее.
UPDATE: ООН не может отправлять данные в МЕГА вообще. Я думаю, что проблема с моей UNO
1 ответ
Вы забыли добавить mySerial.flush()
mySerial.flush()
ждет завершения передачи исходящих последовательных данных.
Добавьте его сразу после отправки данных и хотите изменить статус выводов DE.