El Puerto Serie del Arduino

Voy a empezar esta serie de tutoriales por lo más básico pero no por ello menos importante. El puerto serie.

Nuestro primer programa de ejemplo únicamente necesita nuestra placa Arduino y el cable para conectarlo al PC, no precisa conectar nada más. Es excelente como programa de iniciación pues a la vez que nos vamos familiarizando con el IDE permite comprobar que nuestra placa Arduino y la comunicación serie funcionan correctamente. No sólo eso sino que estos programas podrán ser utilizados en infinidad de futuros proyectos.

Puerto Serial

El puerto serie del Arduino tiene por función la de comunicarse, principalmente con un PC ya sea para programarlo, recibir instrucciones, enviarle a éste el estado de sus sensores, información del proceso que está ejecutando,… Pero también puede comunicarse con otros dispositivos que permitan conexión por puerto serie como sensores, controladoras, displays, etc.

En esencia nos permite introducir datos desde el teclado del PC al microcontrolador y recibir información que usaremos sobretodo para testear el programa. El objetivo de un microcontrolador es funcionar de forma autonoma, pero antes hay que verificar que está programado correctamente, y la forma más sencilla es usar el Serial Monitor como herramienta de debugger.

Empecemos explicando brevemente cómo funciona el puerto serie:
FTDILa conexión por puerto serie depende de los pines Tx y Rx (pines DIGITALES 0 y 1) que se encuentran conectados a la controladora FTDI que es la que permite la traducción del formato serie TTL a USB; no obstante es posible utilizar para este propósito cualquiera de las salidas digitales, incluso varias de ellas simultaneamente, utilizando una nueva libreria incluida a partir de la versión 1.00 del IDE: se trata de la libreria “SoftwareSerial” (antigua NewSoftSerial)

La velocidad de transmision, es decir, los bits/segundo es una característica que se puede ajustar a varios valores (300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, o 115200) Nomalmente se utiliza 9600, que equivale a 1200 caracteres por segundo.

El puerto serie del Arduino recibe la información byte a byte y en formato decimal. por tanto lo que recibe son los números (tipo int) del código ASCII correspondiente a los caracteres transmitidos. Esta información recibida se almacena en un buffer circular de 128 bytes.

Ejemplo1: Escribiendo en el Serial Monitor

El código aquí expuesto permite enviar un texto desde la ventana del Serial Monitor al Arduino y después éste lo devuelve y lo muestra en la misma ventana.

Serial Monitor

El programa se basa en que los datos enviados se leen byte a byte en cada iteración de la función “loop()”. La recepción tiene una latencia, se produce a través de una interrupción, que podría ejecutarse poco después del “Serial.available()” por lo que el dato no entraría, por eso hacemos una pequeña espera “delay(5)”

Usamos dos contadores (c1 y c2) que se igualan al empezar a recibir información y se incrementan simultaneamente mientras se completa la cadena de texto, cuando adquieren valores diferentes significa que ya se ha completado la recepción de todo el texto, por tanto ya podemos imprimir el resultado en pantalla.

También hay que tener en cuenta una peculiaridad de la función “Serial.print()” a la hora de programar es que sólo admite cadenas de texto o números pero no permite mezclar distintos tipos de variables dentro de la misma función.

Ejemplo2: Teclea la palabra clave

Una variación del ejemplo1, donde comprobamos si el texto introducido es igual a uno predeterminado, en caso afirmativo se enciende el led del pin13 si la entrada es errónea permanece apagado.

 

Ejemplo3: Introduciendo números

Si en vez de un texto, queremos introducir valores numéricos desde el puerto serie, esto podría sernos útil por ejemplo para introducir valores que simulen el estado de entradas analógicas o para cambiar el valor de una variable.

En este caso modificamos el programa para detectar únicamente los caracteres que corresponden a números (y el signo si lo hubiere), ignorando el resto. Almacenamos el número introducido en una variable tipo “long”, lo cuál nos permite trabajar en el rango: +/- 2^32

Códigos de este tutorial

Descargar ejemplos

También te podría gustar...