Ciao a tutti
Sto utilizzando un arduino mega connesso a un modulo xbee; posto che la baud rate dell'arduino è di 57600 e quella del modulo xbee è esattamente la stessa, non riesco a capire perchè debba servire un ritardo nella lettura della seriale, dato che il messaggio dovrebbe essere già stato bufferizzato dall'arduino.
while(Serial1.available()<20); //attesa necessaria affinche il messaggio si bufferizzato
for (int i = 1; i<=Lenght; i++) {
DiscardByte = Serial1.read();
CalcChecksum = CalcChecksum + DiscardByte;
delay(1); // ritardo necessario per non fare perdere il sincronismo alla lettura da seriale
}
Il codice postato é solo per favi capire che senza il delay di 1 ms la lettura non viene effettuata bene.
Sapete spiegarmi il perchè, Grazie!!
io leverei semplicemente il "<20" da while, altrimenti esegue anche quando e' uguale a 0 (assenza di dato).
while(Serial1.available()); //finche' c'e' un dato in ingresso
for (int i = 1; i<=Lenght; i++) {
DiscardByte = Serial1.read();
CalcChecksum = CalcChecksum + DiscardByte;
}
non funziona nulla senza quel <20, il while viene eseguito solo dopo una richiesta AT e appunto serve per far si che sia attesa la risposta, infatti finché non ricevo almeno 20 byte devo attendere, dopo di che vado a leggerli dalla seriale.
Il Problema sta nella lettura senza delay che avviene in modo errato e non capisco il motivo.
Senza il delay i byte letti da seriale non sono corretti però ho rimediato utilizzando il delayMicroseconds, praticamente dalle prove fatte con 50 microsecondi il software funziona come con il delay di 1 millisecondo. con meno di 50 micro non funziona più!!
Quindi con questo accorgimento ho guadagnato ben 16 millisecondi.