Come cancellare il buffer seriale di Arduino

Come Cancellare Il Buffer Seriale Di Arduino



Arduino è una piattaforma elettronica che prende istruzioni dagli utenti sotto forma di codice noto come sketch e genera output di conseguenza. Per raccogliere le istruzioni ed elaborarle una per una, Arduino utilizza un buffer seriale. Il buffer seriale di Arduino conserva i dati in entrata finché il dispositivo non è pronto per elaborarli. A volte dobbiamo cancellare il buffer seriale di Arduino per evitare interferenze con i dati in entrata. Vediamo questo in modo più dettagliato.

Buffer seriale Arduino

Quindi, sappiamo tutti che Arduino comunica utilizzando il protocollo di comunicazione seriale noto come USART. Sì, Arduino ha altri protocolli come SPI, I2C ma USART è il protocollo più comune e utilizzato di frequente. Se sei interessato a leggere Arduino tutti e tre i protocolli, fai clic su qui .







I buffer seriali di Arduino raccolgono i caratteri seriali in entrata e li trattengono finché il microcontrollore non può elaborarli. La comunicazione seriale è il metodo per trasferire i dati da un dispositivo all'altro. Arduino che utilizza l'hardware USART sulle sue schede assembla ogni 8 bit in un byte. Quindi archivia questi byte nel buffer seriale, è possibile memorizzare un massimo di 64 byte all'interno del buffer seriale di Arduino.



Cancella il buffer seriale Arduino

I buffer seriali di Arduino hanno una memoria limitata per archiviare i dati nel caso in cui la memoria vada in overflow o sia presente una grande quantità di dati sul pin seriale, dobbiamo prima cancellare il buffer seriale per memorizzare i dati in arrivo. Scopriamo i possibili modi per cancellare il buffer seriale di Arduino.



Modi per cancellare il buffer seriale di Arduino

Per liberare spazio nel buffer seriale in modo che possa essere aggiornato con nuovi dati, può essere utile seguire uno dei due modi seguenti:





    • Cancella il buffer seriale usando la funzione Serial.flush()
    • Cancella il buffer seriale usando la funzione Serial.begin()

1: Cancella il buffer seriale usando la funzione Serial.flush()

Quindi, il primo metodo che può cancellare un buffer seriale Arduino utilizza una funzione Serial.flush(). Questa funzione appartiene alla funzione della libreria seriale di Arduino.

Serial.flush()

La funzione Arduino Serial.flush() attende che i dati vengano trasmessi completamente. Invece di scartare i dati in entrata, gli consente di attendere, quindi una volta che i dati all'interno del buffer sono stati trasmessi completamente, il buffer seriale può ricevere i nuovi dati.



Nota : Dopo aver utilizzato i programmi Serial.flush() potrebbe essere necessario più tempo per l'esecuzione e la stampa dell'output sul monitor seriale. A partire da ora il codice Arduino attende una volta che tutti i dati sono stati trasmessi in modo da poter archiviare nuovi dati nella sua memoria.

Sintassi

Scarico.seriale ( )

Parametri

Richiede solo un parametro.

Seriale: Oggetto porta seriale

ritorna

Questa funzione non restituisce nulla.

Esempio di codice

Ecco il codice che viene scritto senza utilizzare la funzione Serial.flush():

configurazione vuota ( ) {
Inizio.serie ( 9600 ) ;
millis_FlushStart lungo senza segno = millis ( ) ; /* Avvia il codice salvando l'attuale orologio Arduino volta */
Serial.println ( F ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( F ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( F ( 'Linuxhint.com/Tutorial' ) ) ;
millis_FlushStop lungo senza segno = millis ( ) ; /* attuale volta a questo punto */
Stampa.seriale ( F ( 'Senza la funzione di lavaggio ci vuole' ) ) ;
Stampa.seriale ( millis_FlushStop - millis_FlushStart ) ; /* Stampe volta preso dal buffer seriale per stampare i dati */
Serial.println ( F ( 'millisecondi.' ) ) ;
}
ciclo vuoto ( ) {
}


Nel codice sopra abbiamo inizializzato tre diverse stringhe e avviato il codice prendendo l'ora corrente dalla funzione millis() e salvandola in una nuova variabile. Una volta che i dati sono stati stampati di nuovo usando la funzione millis(), passiamo il tempo presente a una nuova variabile.

Una volta ricevuto entrambi i tempi all'interno di due variabili, la differenza ci darà il tempo impiegato da Arduino per stampare le tre stringhe definite in millisecondi.


Nel terminale di output si può vedere che ci vogliono 9ms per stampare la stringa definita.


Ora nel codice riportato di seguito utilizzeremo la funzione Serial.flush() che consentirà il passaggio di tutte le stringhe e attenderà che il buffer seriale diventi libero per ricevere i dati successivi. Pertanto, ci vorrà più tempo rispetto alla stampa dei dati senza utilizzare Serial.flush().

configurazione vuota ( ) {
Inizio.serie ( 9600 ) ;
millis_FlushStart lungo senza segno = millis ( ) ; /* Avvia il codice salvando l'attuale orologio Arduino volta */
Serial.println ( F ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( F ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( F ( 'Linuxhint.com/Tutorial' ) ) ;
Scarico.seriale ( ) ; /* Aspetta per dati da trasmettere dopo quella memoria di svuotamento */
millis_FlushStop lungo senza segno = millis ( ) ; /* attuale volta a questo punto */
Stampa.seriale ( F ( 'Con la funzione Flush ci vuole' ) ) ;
Stampa.seriale ( millis_FlushStop - millis_FlushStart ) ; /* Stampe volta preso dal buffer seriale per stampare i dati */
Serial.println ( F ( 'millisecondi.' ) ) ;
}
ciclo vuoto ( ) {
}


Questo codice è simile a quello che abbiamo spiegato in precedenza. La differenza qui è la funzione Serial.flush() che consente al programma di attendere un po' di tempo in più fino a quando la memoria del buffer seriale diventa libera per la ricezione dei dati successivi.


In output possiamo vedere chiaramente che questa volta ci vogliono 76ms per stampare le tre stringhe rispetto alla precedente che impiega solo 9ms.

2: Cancella il buffer seriale usando la funzione Serial.begin()

Fino ad ora abbiamo spiegato la funzione Serial.flush() per cancellare il buffer seriale, ma questa funzione deve attendere che i dati vengano trasmessi completamente ora vengono in mente le domande e se volessimo cancellare i dati in entrata all'interno del buffer seriale. La risposta alla domanda è semplice: possiamo farlo usando a mentre loop con la funzione di libreria seriale.

Sintassi

mentre ( Seriale.disponibile ( ) )
Serial.read ( ) ;
Serial.end ( ) ;
Inizio.serie ( 9600 ) ;

Codice

Stringa val;
configurazione vuota ( ) {
}
ciclo vuoto ( ) {
Se ( Seriale.disponibile ( ) ) { /* dai un'occhiata per dati seriali */
val = '' ;
mentre ( Seriale.disponibile ( ) ) { /* leggere dati seriali Se a disposizione */
car Serial_Data = Serial.read ( ) ;
val =val+Dati_Seriali; /* memorizzare i dati all'interno di una nuova stringa */
}
Serial.println ( val ) ; /* stampa il leggere dati */
Serial.end ( ) ; /* terminare la comunicazione seriale */
Inizio.serie ( 9600 ) ; /* chiaro buffer seriale */
}
}


Arduino utilizza le funzioni Serial.begin() per inizializzare la comunicazione seriale definendo il baud rate, una volta inizializzata questa funzione i dati precedentemente archiviati nella memoria di Arduino diventano chiari. Qui verificheremo i dati seriali utilizzando la funzione Serial.available() una volta letti i dati verranno archiviati all'interno di una nuova stringa e infine utilizzando Serial.begin(9600) cancelleremo il buffer seriale di Arduino.

Nota: È necessario svuotare il buffer seriale perché assicura che i dati siano stati inviati al dispositivo e che non siano in attesa o in attesa di essere inviati.

Conclusione

Per cancellare il buffer seriale di Arduino in modo che possa memorizzare nuovi dati all'interno della memoria buffer, è possibile utilizzare Serial.flush() e Serial Begin. Può essere usato per cancellare il buffer seriale di Arduino, ma dobbiamo aspettare una volta che tutti i dati sono stati trasmessi per evitarlo, possiamo usare un ciclo while con la funzione Serial.begin() che può anche cancellare i dati in entrata dal buffer seriale.