Problematiche lettura seriale arduino mega

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.

perdonami, hai ragione, non avevo visto il ";" dopo il while, pensavo ci fosse "{".
Errore mio, scusami :wink:

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.

Ma a te arrivano pacchetti di esattamente 20 byte oppure possono essere anche di più?