Hello everyone,
I am working on a small project right now that one "One Arduino Mega" and "Two Arduino UNOs" connected to each other over RS485 bus. The Mega serves as RS485 Master and the two UNOs serve as Slaves. I am using MAX485 modules for UART to RS485 conversion. The circuitry and connections are all fine as I am able to receive proper data from the slaves individually. However, when I connect the three together and then try to fetch the data from each slave using their slave ID, the output starts showing garbage. I have been stuck in this issue for a while now. Any help would be appreciated. I am attaching my test codes for clear understanding.
Warm regards,
- Master_RS485
String SLAVE_ID01 = "001#";
String SLAVE_ID02 = "002#";
String getdata;
void setup() {
Serial1.begin(9600);//Using Serial1 Port
Serial.begin(9600);
pinMode(8, OUTPUT);//DE/RE Controling pin of RS-485
}
void loop() {
read_slave1();
delay(50);
read_slave2();
delay(50);
//Serial.print("Data02:");
//Serial.print(getdata);
//Serial.println("");
}
void read_slave1() {
digitalWrite(8,HIGH);
Serial1.print(SLAVE_ID01);//Write '9' and Fetch Data From Pro Mini
Serial1.flush();
digitalWrite(8,LOW);//DE/RE=LOW Receive Enabled M1
delay(50);
if(Serial1.available()){ //If Serial Data is available
while(Serial1.available())
{
getdata=Serial1.readStringUntil('
- Slave1_RS485
const int sens1 = A0;
const int sens2 = A1;
const int sens3 = A2;
const int sens4 = A3;
int sens1_data, sens2_data, sens3_data, sens4_data;
String sensor_data;
String getdata;
void setup() {
//Serial1.begin(9600);//Uncomment for Arduino Lenardo
Serial.begin(9600);
//while(!Serial1);//Uncomment for Arduino Lenardo
pinMode(13, OUTPUT);//Led Connected
pinMode(8, OUTPUT);//DE/RE Controling pin of RS-485
}
void loop() {
send_response();
delay(100);
}
void send_response() {
digitalWrite(8,LOW);//DE/RE=LOW Receive Enabled
if (Serial.available()) {
getdata = Serial.readStringUntil('#');
}
if(getdata=="001"){
digitalWrite(8,HIGH);//DE/RE=HIGH Transmit Enabled
fetch_sens();
Serial.print(sensor_data);
Serial.flush();
getdata = "";
}
}
void fetch_sens() {
sens1_data = analogRead(sens1);
sens2_data = analogRead(sens2);
sens3_data = analogRead(sens3);
sens4_data = analogRead(sens4);
sensor_data = "<Left>,<S1:" + String(sens1_data) + ">,<S2:" + String(sens1_data) + ">,<S3:" + String(sens3_data) + ">,<S4:" + String(sens4_data) + ">$";
}
- Slave2_RS485
const int sens1 = A0;
const int sens2 = A1;
const int sens3 = A2;
const int sens4 = A3;
int sens1_data, sens2_data, sens3_data, sens4_data;
String sensor_data;
String getdata;
void setup() {
//Serial1.begin(9600);//Uncomment for Arduino Lenardo
Serial.begin(9600);
//while(!Serial1);//Uncomment for Arduino Lenardo
pinMode(13, OUTPUT);//Led Connected
pinMode(8, OUTPUT);//DE/RE Controling pin of RS-485
}
void loop() {
send_response();
delay(100);
}
void send_response() {
digitalWrite(8,LOW);//DE/RE=LOW Receive Enabled
if (Serial.available()) {
getdata = Serial.readStringUntil('#');
}
if(getdata=="002"){
digitalWrite(8,HIGH);//DE/RE=HIGH Transmit Enabled
fetch_sens();
Serial.print(sensor_data);
Serial.flush();
getdata = "";
}
}
void fetch_sens() {
sens1_data = analogRead(sens1);
sens2_data = analogRead(sens2);
sens3_data = analogRead(sens3);
sens4_data = analogRead(sens4);
sensor_data = "<Right>,<S1:" + String(sens1_data) + ">,<S2:" + String(sens1_data) + ">,<S3:" + String(sens3_data) + ">,<S4:" + String(sens4_data) + ">$";
}
Master_RS485.ino (1.38 KB)
Slave_RS485.ino (1.16 KB)
Slave2_RS485.ino (1.16 KB));
Serial.print("Data01: ");
Serial.print(getdata);
Serial1.flush();
}
Serial.println("");
}
getdata = "";
}
void read_slave2() {
digitalWrite(8,HIGH);
Serial1.print(SLAVE_ID02);//Write '9' and Fetch Data From Pro Mini
Serial1.flush();
digitalWrite(8,LOW);//DE/RE=LOW Receive Enabled M1
delay(50);
if(Serial1.available()){ //If Serial Data is available
while(Serial1.available())
{
getdata=Serial1.readStringUntil('
2. Slave1_RS485
§DISCOURSE_HOISTED_CODE_1§
3. Slave2_RS485
§DISCOURSE_HOISTED_CODE_2§
[Master_RS485.ino|attachment](upload://r91hIXynlIHE6bUfxgivWq8Azk7.ino) (1.38 KB)
[Slave_RS485.ino|attachment](upload://wiLh6GSxwKqPkyoClzMIW0Y6eXG.ino) (1.16 KB)
[Slave2_RS485.ino|attachment](upload://pgiLsB8ATgcjlzFduhTzFZZFpNg.ino) (1.16 KB));
Serial.print("Data02: ");
Serial.print(getdata);
Serial1.flush();
}
Serial.println("");
}
getdata = "";
}
- Slave1_RS485
§_DISCOURSE_HOISTED_CODE_1_§
- Slave2_RS485
§_DISCOURSE_HOISTED_CODE_2_§
Master_RS485.ino (1.38 KB)
Slave_RS485.ino (1.16 KB)
Slave2_RS485.ino (1.16 KB)