Cómo borrar el búfer serial de Arduino

Como Borrar El Bufer Serial De Arduino



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

Búfer serie Arduino

Entonces, todos sabemos que Arduino se comunica mediante el 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 los tres protocolos de Arduino, haga clic en aquí .







Los búferes seriales de Arduino recopilan los caracteres seriales entrantes y los retienen hasta que el microcontrolador pueda procesarlos. La comunicación en serie es el método de transferencia de datos de un dispositivo a otro. Arduino, que utiliza hardware USART en sus placas, ensambla cada 8 bits en un byte. Luego almacene estos bytes en el búfer en serie, se pueden almacenar un máximo de 64 bytes dentro del búfer en serie de Arduino.



Borrar el búfer serial de Arduino

Los búferes seriales de Arduino tienen memoria limitada para almacenar datos en caso de que la memoria se desborde o haya una gran cantidad de datos en el pin serial, primero tenemos que borrar el búfer serial para almacenar los datos entrantes. Averigüemos posibles formas de borrar el búfer serial de Arduino.



Formas de borrar el búfer serial de Arduino

Para liberar espacio de búfer en serie para que pueda actualizarse con nuevos datos, puede ser útil seguir las dos formas:





    • Borrar el búfer serial usando la función Serial.flush()
    • Borrar el búfer serial usando la función Serial.begin()

1: Limpiar el búfer serial usando la función Serial.flush()

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

Serial.flush()

La función Arduino Serial.flush() espera a que los datos se transmitan por completo. En lugar de descartar los datos entrantes, permite esperar, de modo 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.flush(), los programas pueden tardar más en ejecutarse e imprimir la salida en el monitor 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

 

Serial.flush ( )

 

Parámetros

Toma solo un parámetro.

De serie: Objeto de puerto serie

Devoluciones

Esta función no devuelve nada.

Código de ejemplo

Aquí está el código que está escrito sin usar la función Serial.flush():

configuración nula ( ) {
Serial.begin ( 9600 ) ;
sin signo largo millis_FlushStart = millis ( ) ; /* Inicie el código guardando el reloj Arduino actual tiempo */
Serial.println ( F ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( F ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( F ( 'Linuxhint.com/Tutorial' ) ) ;
sin signo largo millis_FlushStop = millis ( ) ;   /* Actual tiempo en este punto */
Serial.print ( F ( 'Sin función de descarga se necesita' ) ) ;
Serial.print ( milis_FlushStop - milis_FlushStart ) ; /* Huellas dactilares tiempo tomado por el búfer en serie para imprimir datos */
Serial.println ( F ( 'milisegundos'. ) ) ;
}
bucle vacío ( ) {
}

 
En el código anterior, inicializamos tres cadenas diferentes e iniciamos el código tomando la hora actual de la función millis() y guardándola en una nueva variable. Una vez que los datos se imprimen nuevamente usando la función millis(), pasamos la hora actual a una nueva variable.

Una vez que ambos tiempos se reciben dentro de dos variables, la diferencia nos dará el tiempo que tarda Arduino en imprimir las tres cadenas definidas en milisegundos.


En el terminal de salida se puede ver que tarda 9 ms en imprimir la cadena definida.


Ahora, en el código que se proporciona a continuación, usaremos la función Serial.flush() que permitirá que todas las cadenas pasen y esperen allí hasta que el búfer en serie se borre para recibir los siguientes datos. Por lo tanto, tomará más tiempo en comparación con la impresión de datos sin usar Serial.flush().

configuración nula ( ) {
Serial.begin ( 9600 ) ;
sin signo largo millis_FlushStart = millis ( ) ; /* Inicie el código guardando el reloj Arduino actual tiempo */
Serial.println ( F ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( F ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( F ( 'Linuxhint.com/Tutorial' ) ) ;
Serial.flush ( ) ;     /* Murga por datos que se transmitirán después de ese vaciado de memoria */
sin signo largo millis_FlushStop = millis ( ) ;   /* Actual tiempo en este punto */
Serial.print ( F ( 'Con la función de descarga se necesita' ) ) ;
Serial.print ( milis_FlushStop - milis_FlushStart ) ; /* Huellas dactilares tiempo tomado por el búfer en serie para imprimir datos */
Serial.println ( F ( 'milisegundos'. ) ) ;
}
bucle vacío ( ) {
}

 
Este código es similar a uno que explicamos anteriormente. La diferencia aquí es la función Serial.flush() que permite que el programa espere un poco más de tiempo hasta que la memoria del búfer en serie se borre para recibir los siguientes datos.


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

2: Borrar el búfer serial usando la función Serial.begin()

Hasta ahora explicamos la función Serial.flush() para borrar el búfer serial, pero esta función tiene que esperar a que los datos se transmitan por completo, ahora vienen las preguntas a la mente, ¿y si queremos borrar los datos entrantes dentro del búfer serial? La respuesta a la pregunta es simple: podemos hacer esto usando un tiempo bucle con la función de biblioteca Serial.

Sintaxis

 

  tiempo ( Serie.disponible ( ) )
    Serial.read ( ) ;
Serial.fin ( ) ;
Serial.begin ( 9600 ) ;

 

Código

 

Valor de cadena;
configuración nula ( ) {
}
bucle vacío ( ) {
    si ( Serie.disponible ( ) ) {     /* controlar por datos en serie */
valor = '' ;
      tiempo ( Serie.disponible ( ) ) {   /* leer datos en serie si disponible */
carbonizarse Serial_Data = Serial.read ( ) ;
      valor =val+Datos_Serie; /* almacenar datos dentro de una nueva cadena */
        }
Serial.println ( valor ) ;   /* imprimir el leer datos */
Serial.fin ( ) ;   /* finalizar la comunicación en serie */
Serial.begin ( 9600 ) ;   /* claro búfer en serie */
}
}

 
Arduino usa las funciones Serial.begin() para inicializar la comunicación en serie definiendo la velocidad en 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 usando la función Serial.disponible() una vez que se lean los datos, se almacenarán dentro de una nueva cadena y, por último, usando Serial.begin (9600) borraremos el búfer en serie de Arduino.

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

Conclusión

Para borrar el búfer serial de Arduino para que pueda almacenar nuevos datos dentro de la memoria del búfer, se pueden usar Serial.flush() y Serial begin. Se puede usar para borrar el búfer serial de Arduino, pero tenemos que esperar una vez que se transmitan todos los datos para evitar esto, podemos usar un ciclo while con la función Serial.begin() que también puede borrar los datos entrantes del búfer serial.