Serial Master/Slave problem using serialEvent
i've made master/slave via rs485 using serialevent.
here code master :
here code slave :
the message between master , slave attached, master start "*" , slave start "-"
the problem master lack of response slave 1 step,
actually acceptable wonder if there way make better,
i knew serialevent work after loop not have idea how solve this.
any idea welcome.
thanks in advance,
here code master :
code: [select]
string inputstring = ""; // string hold incoming data
boolean stringcomplete = false; // whether string complete
string poll = "*00100011110001111;";
int = 0;
void setup() {
// initialize serial:
serial.begin(19200);
// reserve 200 bytes inputstring:
inputstring.reserve(200);
pinmode(2, output);
}
void loop() {
poll.setcharat(1, 'a' + i++);
if(i > 10) = 0;
digitalwrite(2, 1);
delay(1);
serial.println(poll);
waiting();
digitalwrite(2, 0);
delay(1);
response();
delay(1000);
}
void response() {
if (stringcomplete) {
serial.println(inputstring); // echo response slave device
// clear string:
inputstring = "";
stringcomplete = false;
}
}
void serialevent() {
while (serial.available()) {
// new byte:
char inchar = (char)serial.read();
if(inchar == '-')
inputstring = "-";
else
inputstring += inchar;
// if incoming character ";", set flag
// main loop can it:
if (inchar == ';') {
stringcomplete = true;
}
}
}
void waiting() {
while (!(ucsr0a & (1 << udre0))) // wait empty transmit buffer
ucsr0a |= 1 << txc0; // mark transmission not complete
while (!(ucsr0a & (1 << txc0))); // wait transmission complete
}
here code slave :
code: [select]
string inputstring = ""; // string hold incoming data
boolean stringcomplete = false; // whether string complete
void setup() {
// initialize serial:
serial.begin(19200);
// reserve 200 bytes inputstring:
inputstring.reserve(200);
pinmode(3, output); // enable pin rs485
digitalwrite(3, 0);
delay(1);
}
void loop() {
if (stringcomplete) {
digitalwrite(3, 1); // enable send
delay(1);
serial.print(inputstring);
waiting();
digitalwrite(3, 0); // enable receive
delay(1);
// clear string:
inputstring = "";
stringcomplete = false;
}
}
void serialevent() {
while (serial.available()) {
// new byte:
char inchar = (char)serial.read();
if(inchar == '*')
inputstring = "-";
else
inputstring += inchar;
// if incoming character ";", set flag
// main loop can it:
if (inchar == ';') {
inputstring = inputstring.substring(0, 7) + "111222333444555666"
+ inputstring.substring(7);
stringcomplete = true;
}
}
}
void waiting() {
while (!(ucsr0a & (1 << udre0))) // wait empty transmit buffer
ucsr0a |= 1 << txc0; // mark transmission not complete
while (!(ucsr0a & (1 << txc0))); // wait transmission complete
}
the message between master , slave attached, master start "*" , slave start "-"
the problem master lack of response slave 1 step,
actually acceptable wonder if there way make better,
i knew serialevent work after loop not have idea how solve this.
any idea welcome.
thanks in advance,
problem solved!
thanks
thanks
Arduino Forum > Using Arduino > Programming Questions > Serial Master/Slave problem using serialEvent
arduino
Comments
Post a Comment