Hi
i am facing a srange situation, having two ardu uno connected with RS485 bus.
first the master ask an analog value from the slave and based on that value it sends back to open or close aled on the slave
the issue is the following ,n case i add delay on the master less than 2000 ms then the serial gets grab...
in case i switch the delay on 4000 then works fine but the data comes really slow !
how can i speed up the data speed from ???
#include <SoftwareSerial.h>
#define SSerialRX 10 //Serial Receive pin
#define SSerialTX 11 //Serial Transmit pin
#define rs485 3 //RS485 Direction control
#define RS485Transmit HIGH
#define RS485Receive LOW
#define Pin13LED 13
#define Pin1 12
SoftwareSerial RS485Serial(SSerialRX, SSerialTX);
int Received;
int Send;
void setup()
{
Serial.begin(115200);
Serial.println("YourDuino.com SoftwareSerial remote loop example");
Serial.println("Use Serial Monitor, type in upper window, ENTER");
pinMode(Pin13LED, OUTPUT);
pinMode(rs485, OUTPUT);
pinMode(Pin1, INPUT);
digitalWrite(rs485, LOW);
RS485Serial.begin(2400);
}
void loop()
{
//if (Serial.available())
// {
// Send = Serial.read();
// digitalWrite(rs485, HIGH);
// RS485Serial.write(Send);
// delay(1);
// digitalWrite(rs485, LOW);
//}
if ( millis() > 4000 )
{
digitalWrite(rs485, HIGH);
RS485Serial.write("xz");
digitalWrite(rs485, LOW);
Received = RS485Serial.read();
Serial.println();
Serial.print(Received);
delay(100);
}
if ( Received >= 100 )
{
digitalWrite(rs485, HIGH);
RS485Serial.write("xww");
digitalWrite(rs485, LOW);
}
if ( Received < 100 )
{
digitalWrite(rs485, HIGH);
RS485Serial.write("zww");
digitalWrite(rs485, LOW);
}
delay(200);
// if (RS485Serial.available())
// {
// digitalWrite(rs485, HIGH);
// Received = RS485Serial.read();
// Serial.println();
// Serial.print(Received);
// delay(1);
// digitalWrite(rs485, LOW);
// }
}
slave
#include <SoftwareSerial.h>
#define SSerialRX 10 //Serial Receive pin
#define SSerialTX 11 //Serial Transmit pin
#define rs485 3
#define RS485Transmit HIGH
#define RS485Receive LOW
#define State1 HIGH
#define State2 LOW
#define Pin13LED 13
SoftwareSerial RS485Serial(SSerialRX, SSerialTX);
int Received;
int Send;
String d;
int xds;
int reer;
void setup()
{
Serial.begin(115200);
Serial.println("SerialRemote");
pinMode(Pin13LED, OUTPUT);
pinMode(rs485, OUTPUT);
digitalWrite(rs485, LOW);
RS485Serial.begin(2400);
}
void loop()
{
reer = analogRead(0);
xds = map(reer, 0, 1023, 0, 255);
while (RS485Serial.available())
{
d = RS485Serial.readString();
if (d.indexOf("xz") >= 0)
{
digitalWrite(rs485, HIGH);
RS485Serial.write(xds);
Serial.flush();
delay(1);
digitalWrite(rs485, LOW);
}
if (d.indexOf("xww") >= 0)
{
digitalWrite(Pin13LED, State1);
}
if (d.indexOf("zww") >= 0)
{
digitalWrite(Pin13LED, State2);
}
}
}
images attached