Arduino Serial Read

Arduino Serial Read

En el lenguaje Arduino Serial Read es una función que permite leer (recibir) bytes mediante un puerto Serial. La función puede funcionar asíncronamente. Una de las características principales del puerto serial de Arduino, es que sólo puede enviar o recibir un byte por transmisión. Entonces para poder usar a la función Serial.read() se requiere indicar, de preferencia, cuantos bytes son los que se quieren leer. Esto es, utilizar a la función Serial.available() en conjunto con Arduino Serial Read para hacer la lectura de los bytes seriales.

La trama de datos recibidos incluye: un bit de inicio + 8 bits de datos + 1 bit de parada.  Especialmente, tenemos este tutorial donde explicamos el puerto Serial.

Sintaxis:

Serial.read( ) ;

Parámetros de entrada: Ninguno

Parámetro de salida:  byte de lectura ó -1 cuando no existe un byte disponible para la lectura.

Recomendación: Usar en conjunto con Serial.available()

 

Ejemplo-1. Arduino Serial Read para activar un LED

Vamos a diseñar una pequeña aplicación para utilizar a la función Arduino Serial Read. Por ejemplo, la aplicación funciona de la siguiente manera: el programa siempre esta esperando por exactamente 1 byte Serial. Cuando el buffer Serial tiene un byte sin leer, este byte se leé y se clasifica. También si el dato recibido corresponde a un carácter ascii A, entonces se enciende el LED 13. Por otro lado, si el byte recibido corresponde a una B, entonces el LED 13 se apaga. Finalmente, la Figura-1, muestra el diagrama a bloques del programa de Arduino.

El código-1 utiliza a la función Serial.available() para determinar la cantidad de bytes que no se han leído del puerto Serial. Si existe mas de 1 byte sin leer, entonces la función utiliza a la variable Dato para, mediante la función Serial.read() obtener el byte del buffer serial.

Diagrama de flujo del codigo 1 para Arduino Serial Read

Figura-1. Diagrama a bloques del código del Ejemplo-1.


Código de Arduino del Ejemplo-1, para la función Serial.read.

Importante. Especialmente, la configuración de monitor serial DEBERÁ ser: no Line Ending. De otro modo, por ejemplo, si tiene configurada NL y CR se estaría enviando, además de la letra, dos bytes más.



Interrupciones con Serial.read()

En algunas aplicaciones es recomendado el uso de interrupciones para la lectura serial. En consecuencia, esto permite que el tiempo del procesador de use para procesos críticos. Por ejemplo, como no sabemos en que momento se recibirá un dato serial (comunicación asíncrona), se utiliza a una función especial llamada serialEvent.

La función serialEvent es llamada en cada ejecución de la función loop. Sin embargo, esta función no es propiamente una interrupción, sino que sólo es llamada en cada ejecución de la función loop [1]. Por lo tanto se recomienda verificar la viabilidad de dicha función para sus proyectos.

Ejemplo-2. Usar a la función Serial.READ mediante interrupciones.

El ejemplo-2, funciona de la misma forma que el ejemplo-1, sólo que la función de recepción serial esta formada como si fuera una interrupción por software. Entonces, para este caso, se puede usar a la función loop para alguna otra aplicación y se recibirá el dato serial de forma asíncrona mediante la función serialEvent.

Código-2

 

¿ Tienes alguna duda ? escríbenos en los comentarios de abajo y con gusto las resolveremos.

 

Funciones relacionadas:

 

Autor: Dr. Rubén E-Marmolejo.

Profesor Universidad de Guadalajara

 

 

 

Fuente:

[1] – https://www.arduino.cc/en/Tutorial/SerialEvent

[2] – http://mkontopoulos.com/teaching/usc/s12/544/wp-content/uploads/2012/01/Serial.pdf 



2 Comments

  1. jorge marzo 30, 2018

Escríbenos tus dudas o comentarios

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Usamos Cookies en nuestro sitio WEB

Por favor confirma, si aceptas nuestras cookies de rastreo. También puedes negar el uso de cookies de rastreo y seguir navegando sin que ninguna información sea enviada a servicios de terceros.