Cómo limpiar el búfer en serie Arduino

Cómo limpiar el búfer en serie Arduino

Arduino es una plataforma electrónica que toma instrucciones de los usuarios en forma de código conocido como boceto y genera salida en consecuencia. Para recopilar las instrucciones y procesarlas una por una, el Arduino usa un búfer en serie. El búfer de serie Arduino contiene los datos entrantes hasta que el dispositivo esté listo para procesarlos. A veces tenemos que borrar el búfer de serie Arduino para evitar la interferencia con los datos entrantes. Veamos esto con más detalle.

Búfer en serie Arduino

Entonces, todos sabemos que Arduino se comunica con el uso del protocolo de comunicación en serie conocido como USART. Sí, Arduino tiene otros protocolos como SPI, I2C, pero USART es el protocolo más común y de uso frecuente. Si tiene interés en leer Arduino los tres protocolos, haga clic aquí.

Los buffers en serie Arduino recolectan los caracteres en serie entrantes y los mantienen hasta que el microcontrolador pueda procesarlos. La comunicación en serie es el método para transferir datos de un dispositivo a otro. Arduino usando hardware Usart en sus tableros ensambla cada 8 bits en un byte. Luego almacene estos bytes en el búfer en serie, se pueden almacenar el máximo 64 bytes dentro del búfer de serie Arduino.

Clear Arduino Serial Buffer

Los búferes en serie Arduino tienen memoria limitada para almacenar datos en caso de que la memoria se desborda o una gran cantidad de datos hay en el pin en serie, primero tenemos que borrar el búfer en serie para almacenar datos entrantes. Averigamos las posibles formas de limpiar el búfer en serie Arduino.

Formas de eliminar el búfer en serie Arduino

Para liberar el espacio del búfer en serie para que pueda actualizarse con nuevos datos que siguen las dos formas pueden ser útiles:

    • Bufla de serie clara usando Serial.Función FLUSH ()
    • Bufla de serie clara usando Serial.función begin ()

1: Borrar búfer en serie CORRECEDOR USO SERIE.Función FLUSH ()

Entonces, el primer método que puede borrar un búfer en serie Arduino es usar una serie.Función FLUSH (). Esta función pertenece a la función de la biblioteca de serie Arduino.

De serie.enjuagar()

Serie arduino.La función FLUSH () espera a que los datos se transmitan por completo. En lugar de descartar los datos entrantes, le permite esperar, por lo que una vez que los datos dentro del búfer se transmiten por completo, el búfer en serie puede recibir los nuevos datos.

Nota: Después de usar serial.Los programas FLUSH () pueden tardar más en ejecutar e imprimir la salida en el monitor de serie. A partir de ahora, el código Arduino espera una vez que se transmiten todos los datos para que pueda almacenar nuevos datos dentro de su memoria.

Sintaxis

De serie.enjuagar()

Parámetros

Solo se necesita un parámetro.

De serie: Objeto de puerto de serie

Devoluciones

Esta función no devuelve nada.

Código de ejemplo

Aquí está el código que se escribe sin usar serial.Función FLUSH ():

setup () void
De serie.comenzar (9600);
Unsigned Long Millis_FlushStart = Millis (); /*Código de inicio guardando la hora actual del reloj Arduino*/
De serie.println (f ("Linuxhint.com/arduino "));
De serie.println (f ("Linuxhint.com/raspberrypi "));
De serie.println (f ("Linuxhint.com/tutorial "));
Unsigned Long Millis_FlushStop = Millis (); /*hora actual en este punto*/
De serie.imprimir (f ("sin función de descarga se toma"));
De serie.print (Millis_FlushStop - Millis_FlushStart); /*Imprime el tiempo tomado por el búfer en serie para imprimir datos*/
De serie.println (f ("milisegundos."));

bucle void ()


En el código anterior, inicializamos tres cadenas diferentes y comenzamos el código tomando el tiempo actual de la función Millis () y guardándolo en una nueva variable. Una vez que los datos se imprimen nuevamente utilizando la función Millis (), pasamos el tiempo presente a una nueva variable.

Una vez que se reciban ambos tiempo dentro de dos variables, la diferencia nos dará el tiempo que Arduino le imprime las tres cadenas definidas en milisegundos.


En el terminal de salida se puede ver, se necesitan 9 ms para imprimir la cadena definida.


Ahora en el código que se da a continuación usaremos la serie.Función FLUSH () que permitirá pasar todas las cadenas y esperar allí hasta que el búfer en serie quede claro para recibir los siguientes datos. Por lo tanto, tomará tiempo extra en comparación con la impresión de datos sin usar Serial.enjuagar().

setup () void
De serie.comenzar (9600);
Unsigned Long Millis_FlushStart = Millis (); /*Código de inicio guardando la hora actual del reloj Arduino*/
De serie.println (f ("Linuxhint.com/arduino "));
De serie.println (f ("Linuxhint.com/raspberrypi "));
De serie.println (f ("Linuxhint.com/tutorial "));
De serie.enjuagar(); /*Espera a que los datos se transmitan después de esa memoria de descarga*/
Unsigned Long Millis_FlushStop = Millis (); /*hora actual en este punto*/
De serie.imprimir (f ("con función de descarga que toma"));
De serie.print (Millis_FlushStop - Millis_FlushStart); /*Imprime el tiempo tomado por el búfer en serie para imprimir datos*/
De serie.println (f ("milisegundos."));

bucle void ()


Este código es similar al que explicamos anteriormente. La diferencia aquí es serial.Función FLUSH () que permite que el programa espere un tiempo extra hasta que la memoria del búfer en serie quede claro para recibir los próximos datos.


En la salida, podemos ver claramente que esta vez se necesitan 76 ms para imprimir las tres cadenas en comparación con la anterior que solo toma 9 ms.

2: Borre de serie bordeado usando Serial.función begin ()

Hasta ahora explicamos la serie de la función.FLUSH () para borrar el búfer en serie, pero esta función tiene que esperar a que los datos se transmitan por completo ahora las preguntas vienen a la mente qué pasa si queremos borrar los datos entrantes dentro del búfer en serie. La respuesta a la pregunta es simple: podemos hacer esto usando un mientras Luce con la función de biblioteca en serie.

Sintaxis

mientras (en serie.disponible())
De serie.leer();
De serie.fin();
De serie.comenzar (9600);

Código

Cadena val;
setup () void

bucle void ()
if (serial.disponible ()) /*Verifique los datos en serie* /
val = "";
mientras (en serie.disponible ()) /*Leer datos serie si está disponible* /
char serial_data = serial.leer();
val = val+serial_data; /*almacenar datos dentro de una nueva cadena*/

De serie.println (val); /*Imprima los datos de lectura*/
De serie.fin(); /*End Communication*/
De serie.comenzar (9600); /*Clear Buffer Serial*/


Arduino usa serial.Begin () Funciones para inicializar la comunicación en serie definiendo la tasa de baudios, una vez que esta función se inicializa, los datos previamente almacenados en la memoria de Arduino se vuelven claros. Aquí verificaremos los datos en serie utilizando la serie.Función disponible () Una vez que se lean los datos, se almacenará dentro de una nueva cadena y, por último, utilizando Serial.BEGIN (9600) Clararemos el búfer en serie Arduino.

Nota: Necesitamos descargar el búfer en serie porque asegura que los datos se hayan enviado al dispositivo y simplemente no estén esperando o en espera para ser enviados.

Conclusión

Para borrar el búfer de serie Arduino para que pueda almacenar nuevos datos dentro de la memoria de la memoria del búfer.FLUSH () y el comienzo en serie se pueden usar. Se puede usar para borrar el búfer de serie Arduino, pero tenemos que esperar una vez que todos los datos se transmitan para evitar esto, podemos usar un bucle de tiempo con serie.Función Begin () que también puede borrar los datos entrantes del búfer en serie.