Recibir datos seriales Arduino
Anteriormente vimos cómo enviar datos desde nuestro Arduino hacia la computadora, ahora toca el turno a enviar datos desde la computadora y recibirlos en el Arduino.
Para lograr esto no se requiere instalar nada adicional, de igual manera utilizaremos la ventana del “monitor serial”, pero ahora usaremos el cuadro de captura superior y el botón “Enviar”.
Todo lo que se escriba en este cuadro de texto y se envíe, será recibido en el Arduino como “texto”, esto es que si nosotros escribimos un “15” en nuestra terminal y lo enviamos, al recibirse será un “1” y un “5”, en bytes separados, no se recibirá un 15.
Esto es un concepto común en las terminales seriales, y es que se maneja todo como String (cadenas de caracteres), y cada caracter que se transmita será de un byte de tamaño, con el valor correspondiente en la tabla de caracteres ASCII.
Diferencia entre String y número
Cuando una persona se adentra en el mundo de la programación empieza a tratar con conceptos un tanto más confusos como podría llegar a ser distinguir entre los tipos de datos.
Cuando se transmite el caracter “r” por cualquier medio (una terminal serial, por Internet, en un mensaje de texto, guardarlo en una memoria) en realidad se está mandando un número. Los equipos digitales como las computadoras trabajan con números, binarios en específico, entonces al enviar una “r” se envía en realidad un 01110010 en binario, que en decimal es un 114 y si se trata como un caracter, corresponde a la “r” en minúscula.
A todo esto, si nosotros enviamos este caracter “r” por la terminal, en nuestro Arduino lo podemos recibir con el siguiente código:
void loop() { byte Recibir; if(Serial.available()) { Recibir = Serial.read(); if(Recibir == 'r') { Serial.print("Recibí una r"); } } }
La condición if(Recibir == ‘r’) tendría el mismo resultado si la cambiamos por estas otras posibilidades:
if(Recibir == 114) // 114 es el valor correspondiente a la “r” en decimal
if(Recibir == 0b01110010) // 0b es para indicar que es un valor en binario y 01110010 es 114 en binario
if(Recibir == 0x72) // 0x es para indicar que es un valor hexadecimal y el 72 hexadecimal es igual a 114 decimal
Ejercicios:
6B: Ejercicio: Conectar dos LEDs uno en el puerto 13 y otro en el puerto 12.
Desde el monitor serial enviar “a” para encender/apagar el LED del puerto 13.
Desde el monitor serial enviar “b” para encender/apagar el LED del puerto 12.
De modo que al enviar “a” o “b” se encienda o apague el LED correspondiente, si está apagado encienda y si está encendido apague.
void loop() { byte Recibido; // Revisa si hay datos enviados desde la computadora: if (Serial.available()) { // Lee el último byte: Recibido = Serial.read(); if(Recibido == 'a') { if(digitalRead(ledPinA) == HIGH) { digitalWrite(ledPinA,LOW); } else { digitalWrite(ledPinA,HIGH); } } if(Recibido == 'b') { if(digitalRead(ledPinB) == HIGH) { digitalWrite(ledPinB,LOW); } else { digitalWrite(ledPinB,HIGH); } } } }
(334)