Come cancellare il tampone seriale Arduino

Come cancellare il tampone seriale 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 tampone seriale. Il buffer seriale Arduino contiene i dati in arrivo fino a quando il dispositivo è pronto a elaborarli. A volte dobbiamo cancellare il tampone seriale Arduino per evitare l'interferenza con i dati in arrivo. Vediamo questo in modo più dettagliato.

Tampone seriale Arduino

Quindi, sappiamo tutti che Arduino comunica usando il protocollo di comunicazione seriale noto come USART. Sì, Arduino ha alcuni altri protocolli come SPI, I2C ma USART è il protocollo più comune e usato. Se hai interesse a leggere Arduino tutti e tre i protocolli, fai clic qui.

I buffer seriali Arduino raccolgono i caratteri seriali in arrivo e li tengono fino a quando il microcontrollore non può elaborarli. La comunicazione seriale è il metodo per trasferire i dati da un dispositivo a un altro. Arduino che utilizza l'hardware USART sulle sue schede assembla ogni 8 bit in un byte. Quindi memorizzare questi byte nel tampone seriale, il massimo 64 byte può essere archiviato all'interno del tampone seriale Arduino.

Cancella tampone seriale Arduino

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

Modi per cancellare il tampone seriale Arduino

Per liberare lo spazio del buffer seriale in modo che possa essere aggiornato con nuovi dati che seguono i due modi può essere utile:

    • Cancella tampone seriale usando seriale.Funzione flush ()
    • Cancella tampone seriale usando seriale.inizio () funzione

1: Cancella tampone seriale usando seriale.Funzione flush ()

Quindi, il primo metodo che può cancellare un tampone seriale Arduino sta usando un seriale.Funzione flush (). Questa funzione appartiene alla funzione della libreria seriale Arduino.

Seriale.sciacquone()

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

Nota: Dopo aver usato seriale.I programmi Flush () possono richiedere più tempo per eseguire e stampare l'output sul monitor seriale. A partire da ora il codice Arduino attende una volta trasmessi tutti i dati in modo da poter archiviare nuovi dati all'interno della sua memoria.

Sintassi

Seriale.sciacquone()

Parametri

Ci vuole solo un parametro.

Seriale: Oggetto porta seriale

ritorna

Questa funzione non restituisce nulla.

Codice di esempio

Ecco il codice che è scritto senza usare seriale.Funzione flush ():

void setup ()
Seriale.Inizia (9600);
Long millis_flushstart non firmato = millis (); /*Avvia il codice salvando il tempo di clock Arduino corrente*/
Seriale.println (f ("LinuxHint.com/arduino "));
Seriale.println (f ("LinuxHint.com/Raspberrypi "));
Seriale.println (f ("LinuxHint.com/tutorial "));
Long millis_flushStop non firmato = millis (); /*ora corrente a questo punto*/
Seriale.stampare (f ("senza funzionamento a filo che serve"));
Seriale.print (millis_flushstop - millis_flushstart); /*Stampa il tempo impiegato dal buffer seriale per stampare i dati*/
Seriale.println (f ("millisecondi."));

void loop ()


Nel codice sopra abbiamo inizializzato tre stringhe diverse e abbiamo iniziato il codice prendendo il tempo corrente dalla funzione Millis () e salvandolo in una nuova variabile. Una volta stampati i dati utilizzando la funzione Milis () passiamo il tempo presente a una nuova variabile.

Una volta ricevuta entrambe le volte in due variabili, la differenza ci darà il tempo impiegato da Arduino per stampare le tre stringhe definite in millisecondi.


Nel terminale di output può essere visto ci vuole 9ms per stampare la stringa definita.


Ora nel codice indicato di seguito useremo il seriale.FUNZIONE FLUSH () che consentirà a tutte le stringhe di passare e attendere lì fino a quando il buffer seriale non diventa chiaro per ricevere i dati successivi. Pertanto, ci vorrà del tempo extra rispetto alla stampa dei dati senza utilizzare Serial.sciacquone().

void setup ()
Seriale.Inizia (9600);
Long millis_flushstart non firmato = millis (); /*Avvia il codice salvando il tempo di clock Arduino corrente*/
Seriale.println (f ("LinuxHint.com/arduino "));
Seriale.println (f ("LinuxHint.com/Raspberrypi "));
Seriale.println (f ("LinuxHint.com/tutorial "));
Seriale.sciacquone(); /*Attende che i dati vengano trasmessi dopo quella memoria a filo*/
Long millis_flushStop non firmato = millis (); /*ora corrente a questo punto*/
Seriale.stampare (f ("con la funzione a filo che prende"));
Seriale.print (millis_flushstop - millis_flushstart); /*Stampa il tempo impiegato dal buffer seriale per stampare i dati*/
Seriale.println (f ("millisecondi."));

void loop ()


Questo codice è simile a quello che abbiamo spiegato in precedenza. La differenza qui è seriale.FUNZIONE FLUSH () che consente al programma di attendere un po 'di tempo extra fino a quando la memoria del buffer seriale non diventa chiaro per la ricezione dei dati successivi.


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

2: Cancella tampone seriale usando seriale.inizio () funzione

Fino ad ora abbiamo spiegato la funzione seriale.flush () per cancellare il buffer seriale ma questa funzione deve attendere che i dati vengano trasmessi completamente ora, le domande vengono in mente cosa succede se vogliamo cancellare i dati in arrivo all'interno del buffer seriale. La risposta alla domanda è semplice: possiamo farlo usando a Mentre Loop con la funzione della libreria seriale.

Sintassi

mentre (seriale.disponibile())
Seriale.Leggere();
Seriale.FINE();
Seriale.Inizia (9600);

Codice

String Val;
void setup ()

void loop ()
Se (seriale.disponibile ()) /*Controlla i dati seriali* /
val = "";
mentre (seriale.disponibile ()) /*Leggi i dati seriali se disponibili* /
char serial_data = serial.Leggere();
val = val+serial_data; /*archivia i dati all'interno della nuova stringa*/

Seriale.println (val); /*Stampa i dati di lettura*/
Seriale.FINE(); /*comunicazione seriale finale*/
Seriale.Inizia (9600); /*Cancella buffer seriale*/


Arduino usa seriale.inizio () funzioni per inizializzare la comunicazione seriale definendo la velocità di baud, una volta inizializzata questa funzione i dati precedentemente memorizzati nella memoria di Arduino diventano chiari. Qui verificheremo i dati seriali utilizzando il seriale.Disponibile () funzione Una volta che i dati vengono letti, archiverà all'interno di una nuova stringa e infine utilizzando Serial.Inizia (9600) cancelleremo il tampone seriale Arduino.

Nota: Dobbiamo scaricare il buffer di seriale perché assicura che i dati siano stati inviati al dispositivo e non aspettano o in attesa da inviare.

Conclusione

Per cancellare il buffer seriale Arduino in modo che possa archiviare nuovi dati all'interno del seriale di memoria buffer.Flush () e Serial Begin possono essere utilizzati. Può essere usato per cancellare il tampone seriale Arduino, ma dobbiamo aspettare una volta che tutti i dati vengono trasmessi per evitarlo, possiamo usare un ciclo while con seriale.funzione inizia () che può anche cancellare i dati in arrivo dal buffer seriale.