Serial Master/Slave problem using serialEvent


i've made master/slave via rs485 using serialevent.

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


Arduino Forum > Using Arduino > Programming Questions > Serial Master/Slave problem using serialEvent


arduino

Comments

Popular posts from this blog

Convierte tu Raspberry en un NAS. Firmware fvdw-sl 15.3 - Raspberry Pi Forums

How to format a Get Request

avrdude: verification error, first mismatch at byte 0x0000 0x0c != 0x62