Arduino serialEvent – recepción serial asíncrona

La función de Arduino serialEvent te permite recibir datos seriales de una forma parecida a una interrupción o de forma asíncrona. Entonces está función sólo se ejecuta si existen datos seriales en el buffer del puerto serial. La función de Arduino Serial Read se usa para leer a estos datos seriales. Es importante mencionar que esta función no es asíncrona propiamente, sino que es ejecutada en cada iteración de la función loop. Por lo tanto si la función loop demora mucho, así será la demora de la recepción de los datos seriales. Esta función no es compatible con el Arduino Esplora, Leonardo y Micro.

Sintaxis de la función de Arduino serialEvent

La sintaxis de la función de Arduino serialEvent sólo requiere definir a la función void serialEvent() después de la función loop. Entonces dentro de esta función se puede agregar las instrucciones para la lectura de los datos seriales mediante el serial read. El propósito de esta función es ejecutarse al inicio de cada iteración para la función loop. Esto se realizará hasta encontrar un carácter del código ascii que nos permita saber si ya se termino la transmisión. Para dicho evento, normalmente se utilizan a los caracteres \n o \r.

void serialEvent( ){

//Código para la recepción serial.

}

Función de Arduino serialEvent

Código de Ejemplo para la función de Arduino serialEvent

El siguiente código de ejemplo, permite la recepción de caracteres numéricos y su posterior conversión a una variable entera. Recordemos que el puerto serial esta «transportando» bytes en forma de caracteres en código ascii. Entonces, una vez que hemos terminado de recibir una línea que contenga exclusivamente numeros ascii, se procede a convertirlo a una variable entera,  (int) mediante la función de Arduino atoi.

Elementos del código de ejemplo

El código del ejemplo anterior contiene ciertas instrucciones que permiten la recepción serial.

  • String. La variable del tipo string permite guardar una cadena de caracteres. Por ejemplo, un string es como un vector de variables char, pero con mejoras.
  • bool. Es una variable que puede guardar dos estados, false o true.  Esta variable se utiliza para saber si ya recibió o no el fin de la línea de transmisión.
  • Serial.available(). Está función te regresa verdadero, si hay dos sin leer en el buffer de entrada serial. También regresa falso si ya no hay información para leer.
  • Serial.read(). Lee un byte a la vez de puerto serial. Es por eso que se utiliza en conjunto con el while(serial.avialable()) para leer todos y cada uno de los bytes recibidos.
  • .toChayArray() . Permite convertir un string a un vector de caracteres.
  • atoi. Esta función nos permite convertir un vector de caracteres a una variable entera.

Otras funciones de Arduino

 

Un comentario en «Arduino serialEvent – recepción serial asíncrona»

  1. Buenas noches, trabajo en un proyecto con una celda de carga y un modulo amplificador HX711, la lectura la estoy tomando en un display LCD 16×2, el problema es que al realizar mediciones y poner carga sobre la balanza el valor de la lectura aumenta y todo normal pero al retirar la carga el valor no se borra del display y que da oscilando el valor del primer digito ,al colocar de nuevo una carga el valor nuevamente aumenta reemplazando los números que no se borraron, agradezco cualquier información que me pudiera brindar sobre como solucionar este problema y asi poder hacer que trabaje como una balanza normal. Estoy usando un shield LCD keypad para asignarle funciones de calibrar y tara. Muchas gracias.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *