gpb01:
... spesso la Serial.available() è più veloce della ricezione stessa e ...
Cioè available() potrebbe tornare false tra un byte ricevuto e il successivo!?
La mia esperienza è alquanto limitata, ma sono perplesso!
Federico
gpb01:
... spesso la Serial.available() è più veloce della ricezione stessa e ...
Cioè available() potrebbe tornare false tra un byte ricevuto e il successivo!?
La mia esperienza è alquanto limitata, ma sono perplesso!
Federico
Federico66:
Cioè available() potrebbe tornare false tra un byte ricevuto e il successivo!?
La mia esperienza è alquanto limitata, ma sono perplesso!
SI, e capita anche spesso, specie se la trasmissione seriale non è delle più veloci ...
... basta che calcoli il tempo che impiega un carattere ad arrivare (... a 9600 bps impiega cira 1 mSec che ... è un'eternità
) ed il tempo di esecuzione del while() ... se il secondo è inferiore del primo, tu vai a fare il controllo quando il carattere NON è ancora arrivato e quindi available() ti da, giustamente, 0 (... nessun carattere disponibile).
Guglielmo
gpb01:
SI, e capita anche spesso, specie se la trasmissione seriale non è delle più veloci ...
Non posso che accettarlo come atto di fede ![]()
Federico
Federico66:
Non posso che accettarlo come atto di fede
Assolutamente NO, ragiona su quello che fai nel while() e a quante decine di µSec dura, dopo pensa che per ricevere un solo carattere a 9600 impieghi 1 mSec ... ti rendi conto che fino a quando il carattere non è completamente ricevuto e spostato nel buffer di ricezione (che è quello che la available() ti da) ... tu NON hai nulla e quindi, giustamente, available() ritorna 0.
Ovvio che se hai un ciclo while() la cui durata è talmente lunga da superare il tempo di ricezione del singolo carattere più il tempo del suo spostamento nel buffer di ricezione ... allora funziona ... ma è un caso ![]()
Guglielmo
gpb01:
Assolutamente NO, ragiona ...
era una battuta, avevo già capito al tuo primo post ![]()
ma finora non mi è capitato di riscontrare il problema, forse proprio per il seguente motivo:
gpb01:
Ovvio che se hai un ciclo while() la cui durata è talmente lunga da superare il tempo di ricezione del singolo carattere più il tempo del suo spostamento nel buffer di ricezione ... allora funziona ... ma è un caso
Comunque al prossimo progetto ci farò attenzione.
Grazie
Federico
Federico66:
era una battuta, avevo già capito al tuo primo post
![]()
Guglielmo
Ringrazio Guglielmo per le dritte che mi ha dato e corro subito a mettere apposto il codice. Poi vado a studiarmi un po gli array visto che questo è il primo progetto che faccio dove sono costretto ad usarli.
Grazie a tutti