Com esborrar el buffer sèrie d'Arduino

Com Esborrar El Buffer Serie D Arduino



Arduino és una plataforma electrònica que pren instruccions dels usuaris en forma de codi conegut com sketch i genera resultats en conseqüència. Per recollir les instruccions i processar-les una per una, l'Arduino utilitza un buffer sèrie. El buffer sèrie Arduino conté les dades entrants fins que el dispositiu estigui preparat per processar-les. De vegades hem d'esborrar el buffer sèrie d'Arduino per evitar interferències amb les dades entrants. Vegem-ho amb més detall.

Arduino Serial Buffer

Per tant, tots sabem que Arduino es comunica mitjançant el protocol de comunicació en sèrie conegut com USART. Sí, Arduino té alguns altres protocols com SPI, I2C, però USART és el protocol més comú i utilitzat amb freqüència. Si teniu interès en llegir els tres protocols d'Arduino, feu clic aquí .







Els buffers sèrie d'Arduino recullen els caràcters de sèrie entrants i els mantenen fins que el microcontrolador els pugui processar. La comunicació en sèrie és el mètode per transferir dades d'un dispositiu a un altre. Arduino que utilitza maquinari USART a les seves plaques munta cada 8 bits en un byte. A continuació, emmagatzemeu aquests bytes a la memòria intermèdia sèrie, es poden emmagatzemar un màxim de 64 bytes dins de la memòria intermèdia sèrie Arduino.



Esborra el buffer sèrie Arduino

Els buffers sèrie d'Arduino tenen memòria limitada per emmagatzemar dades en cas que si la memòria es desborda o hi ha una gran quantitat de dades al pin sèrie, primer hem d'esborrar la memòria intermèdia sèrie per emmagatzemar les dades entrants. Descobrim possibles maneres d'esborrar el buffer sèrie d'Arduino.



Maneres d'esborrar el buffer sèrie d'Arduino

Per alliberar espai de memòria intermèdia sèrie perquè es pugui actualitzar amb dades noves, pot ser útil seguir les dues maneres:





    • Esborra la memòria intermèdia sèrie mitjançant la funció Serial.flush().
    • Esborra la memòria intermèdia sèrie mitjançant la funció Serial.begin().

1: esborra la memòria intermèdia sèrie mitjançant la funció Serial.flush().

Per tant, el primer mètode que pot esborrar un buffer sèrie Arduino és utilitzar una funció Serial.flush(). Aquesta funció pertany a la funció de biblioteca sèrie d'Arduino.

Serial.flush()

La funció Arduino Serial.flush() espera que les dades es transmetin completament. En lloc de descartar les dades entrants, li permet esperar, de manera que una vegada que les dades dins de la memòria intermèdia es transmetin completament, la memòria intermèdia sèrie pot rebre les dades noves.



Nota : Després d'utilitzar els programes Serial.flush() pot trigar més temps a executar-se i imprimir la sortida al monitor sèrie. A partir d'ara, el codi Arduino espera un cop es transmetin totes les dades perquè pugui emmagatzemar dades noves a la seva memòria.

Sintaxi

Serial.flush ( )

Paràmetres

Només necessita un paràmetre.

Sèrie: Objecte del port sèrie

Devolucions

Aquesta funció no retorna res.

Exemple de codi

Aquí teniu el codi que s'escriu sense utilitzar la funció Serial.flush():

configuració de buit ( ) {
Serial.begin ( 9600 ) ;
sense signar llarg millis_FlushStart = mil·lisos ( ) ; /* Inicieu el codi desant el rellotge Arduino actual temps */
Serial.println ( F ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( F ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( F ( 'Linuxhint.com/Tutorial' ) ) ;
llarg sense signar millis_FlushStop = mil·lisos ( ) ; /* actual temps en aquest punt */
Impressió.sèria ( F ( 'Sense la funció Flush es necessita' ) ) ;
Impressió.sèria ( millis_FlushStop - millis_FlushStart ) ; /* Estampats temps presa per la memòria intermèdia sèrie per imprimir dades */
Serial.println ( F ( 'mil·lisegons'. ) ) ;
}
bucle buit ( ) {
}


Al codi anterior vam inicialitzar tres cadenes diferents i vam iniciar el codi agafant l'hora actual de la funció millis() i desant-la en una nova variable. Un cop les dades es tornen a imprimir amb la funció millis() passem el temps actual a una nova variable.

Un cop rebut el temps dins de dues variables, la diferència ens donarà el temps que triga Arduino a imprimir les tres cadenes definides en mil·lisegons.


Al terminal de sortida es pot veure que triga 9 ms a imprimir la cadena definida.


Ara, al codi que es mostra a continuació, utilitzarem la funció Serial.flush() que permetrà que passin totes les cadenes i esperar-hi fins que la memòria intermèdia de sèrie quedi clar per rebre les següents dades. Per tant, es necessitarà més temps en comparació amb la impressió de dades sense utilitzar Serial.flush().

configuració de buit ( ) {
Serial.begin ( 9600 ) ;
sense signar llarg millis_FlushStart = mil·lisos ( ) ; /* Inicieu el codi desant el rellotge Arduino actual temps */
Serial.println ( F ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( F ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( F ( 'Linuxhint.com/Tutorial' ) ) ;
Serial.flush ( ) ; /* Espera per dades que es transmetran després d'aquesta memòria de buidat */
llarg sense signar millis_FlushStop = mil·lisos ( ) ; /* actual temps en aquest punt */
Impressió.sèria ( F ( 'Amb la funció Flush es necessita' ) ) ;
Impressió.sèria ( millis_FlushStop - millis_FlushStart ) ; /* Estampats temps presa per la memòria intermèdia sèrie per imprimir dades */
Serial.println ( F ( 'mil·lisegons'. ) ) ;
}
bucle buit ( ) {
}


Aquest codi és similar al que hem explicat anteriorment. La diferència aquí és la funció Serial.flush() que permet al programa esperar una mica de temps addicional fins que la memòria intermèdia en sèrie quedi clara per rebre les següents dades.


A la sortida podem veure clarament que aquesta vegada es triguen 76 ms a imprimir les tres cadenes en comparació amb l'anterior que només triga 9 ms.

2: esborra la memòria intermèdia sèrie mitjançant la funció Serial.begin().

Fins ara explicàvem la funció Serial.flush() per esborrar la memòria intermèdia sèrie, però aquesta funció ha d'esperar que les dades es transmetin completament, ara vénen a la ment les preguntes que passa si volem esborrar les dades entrants dins de la memòria intermèdia sèrie. La resposta a la pregunta és senzilla: ho podem fer amb a mentre bucle amb la funció de biblioteca en sèrie.

Sintaxi

mentre ( Serial.disponible ( ) )
Serial.read ( ) ;
Final.sèrie ( ) ;
Serial.begin ( 9600 ) ;

Codi

String val;
configuració de buit ( ) {
}
bucle buit ( ) {
si ( Serial.disponible ( ) ) { /* comprovar per dades en sèrie */
val = '' ;
mentre ( Serial.disponible ( ) ) { /* llegir dades en sèrie si disponible */
char Dades_sèrie = Serial.read ( ) ;
val =val+Dades_sèrie; /* emmagatzemar dades dins de la cadena nova */
}
Serial.println ( val ) ; /* imprimir el llegir dades */
Final.sèrie ( ) ; /* finalitzar la comunicació en sèrie */
Serial.begin ( 9600 ) ; /* clar memòria intermèdia sèrie */
}
}


Arduino utilitza les funcions Serial.begin() per inicialitzar la comunicació en sèrie mitjançant la definició de la velocitat de transmissió, un cop inicialitzada aquesta funció, les dades emmagatzemades anteriorment a la memòria Arduino es veuen clares. Aquí comprovarem les dades de sèrie mitjançant la funció Serial.available() un cop llegides les dades, s'emmagatzemarà dins d'una cadena nova i, finalment, utilitzant Serial.begin(9600) esborrarem el buffer sèrie d'Arduino.

Nota: Hem d'esborrar la memòria intermèdia sèrie perquè garanteix que les dades s'han enviat al dispositiu i que simplement no estan esperant o en espera per ser enviades.

Conclusió

Per esborrar la memòria intermèdia Arduino de manera que pugui emmagatzemar dades noves a la memòria intermèdia, es pot utilitzar Serial.flush() i Serial begin. Es pot utilitzar per esborrar la memòria intermèdia sèrie Arduino, però hem d'esperar una vegada que es transmetin totes les dades per evitar-ho, podem utilitzar un bucle while amb la funció Serial.begin() que també pot esborrar les dades entrants de la memòria intermèdia sèrie.