credo di aver trovato la soluzione:
il carattere lo leggo così:
do
{
if(Serial.available()> 0)
{
stringaSERIALE[index]=Serial.read();
index++; count = millis();
}
fineLettura = ( (index >= dimVettore) || (millis() - count > countMax));
}
while (!fineLettura);
quindi c'è un ciclo do - while controllato dalla variabile booleana "fineLettura". all'interno, però, c'è un IF nidificato che fa si che si possa leggere il carattere solo se serial.vailable è true ... se è falso ì non viene letto nulla, ma non esce comunque dal do-while .. attende, infatti, che serial.vailable sia di nuovo vero , se nel frattempo è arrivato un altro carattere, oppure aspetta il timeout (perchè non sono arrivati altri caratteri... Tutto questo funziona bene....
devo semplicemente riproporre lo stesso meccanismo per cancellare il buffer della seriale, quando è uscito dal primo do-while.. e tutto funzionerà (.. almeno credo)...
insomma questo è sbagliato:
while (Serial.available()) {tempByte = Serial.read();}
devo riproporre lo stesso schema, con do-while controllato con una condizione logica, e timeout per accertarsi che non ci sia più nulla in coda al buffer (come faccio sopra per leggere il carattere) .. altrimenti, se non faccio così, se l'esecuzione passa velocemente a queste istruzioni (come quando cancello i serial.print di debug), trova serial.available ancora false, perchè non è ancora giunto il byte (specie se la connesisone seriale è impostata a bassa velocità) e mi salta la cancellazione del buffer, quindi al ciclo successivo mi mette nel mio vettore gli ultimi valori ricevuti anzichè i primi ...
Credo sia questa la soluzione .... stasera riprovo con questa idea ...
grazie ciao