En este tutorial vamos a aprender a comunicarnos con nuestro Pinguno utilizando la conexión serial.
Lo primero que tenemos que saber es que realmente no vamos a utilizar comunicación serial, sino CDC. Un protocolo muy extendido cuya misión es emular este tipo de conexión via USB.
La forma más simple de este tipo de comunicación es emplenado algún programa tipo hyperterminal(Windows), minicom(linux) o MacWise(MAC) que permite establecer una conexión con los puertos COM (serial) y recibir información y enviar comandos. Pero también podríamos programar aplicaciones mucho más sofisticadas que por debajo establezcan este tipo de conexión para controlar el Pinguino.
Las funciones más importantes para manejar estas conexiones son dos:
//creamos una variable para el dato que vamos a querer leer char dato; //creamos una variable para la recepción de datos unsigned char receivedbyte; //Creamos un Array para el buffer de lectura unsigned char buff[64]; //definimos la pata 7 como Led #define led 7 void setup(){ //configuramos el pin 7 cómo una salida pinMode(led, OUTPUT); //Apagamos el led digitalWrite(led7,LOW); } void loop() { //Mostramos un mensaje para saber que se ha establecido comunicación CDC.printf("Listo\r\n"); //creamos un bucle que se ejecutará mientras no recibamos nada. while((receivedbyte = CDC.read(buff)) == 0); //Cuando recibamos algo entraremos aquí if(receivedbyte > 0){ //almacenamos en la variable dato el primer valor del array buffer dato = buff[0]; //si mandamos un dos... if(dato == '1'){ //encendemos el Led digitalWrite(led7,HIGH); //Mostramos un mensaje de que lo hemos encendido CDC.printf("Led ON\r\n"); }else if(dato == '3'){ //si hemos eviado un 0... //apagamos el led digitalWrite(led,LOW); //lo indicamos con un mensaje CDC.printf("Led apagado\r\n"); } } }
Un par de cosas más a comentar sobre el código. La primera es el tamaño del buffer, 64bits es el tamaño máximo del paquete que se puede enviar via CDC
.Lo que se almacena en dato no es la tecla pulsada, sino su valor ASCII. En el caso del ejemplo es igual porque coincide el valor de las teclas con su valor en la tabla ASCII, pero es importante tenerlo en cuenta si vamos a utilizar letras o simbolos.
los caracteres que vemos despues de cada mensaje mandado (\r\n) son caracteres de escapes equivalentes al retorno de carro (\r) y el salto de linea(\n) estas dos acciones se suceden de forma automatica cuando pulsamos enter en un procesador de textos, por ejemplo. El cursos vuelve a la posición más a la izquierda (retorno de carro) y baja una linea (salto de linea.)
El circuito a controlar sería tan simple cómo la placa de Pinguino y un Led con su correspondiente resitencia:
Ahora que sabemos usar esta conexión podemos crear un pequeño programa que envie los comandos al pulsar un botón, por ejemplo.