En los ejemplos anteriores hemos visto como leer valores de un sensor y actuar sobre un relé en función de las medidas. Ahora veremos como comunicar el Arduino con otros dispositivos para poder tanto llevar esa información a otros dispositivos como actuar ante mensajes recibidos de otros dispositivos. En este caso veremos leer un mensaje enviado por la consola Serie de Arduino y encender un LED si es el valor correcto. Del mismo modo haremos esto con una conexión Bluetooth y enviaremos mensajes mediante una aplicación Android creada con la aplicación APP Inventor.
Envío de datos a través de la consola por el puerto serie
Como hemos visto anteriormente, es posible establecer una comunicación con el Arduino mediante el puerto Serie del USB que se conecta al PC. Esta conexión nos permitirá enviar y recibir información y así poder comunicar el Arduino con otros dispositivos (en este caso un PC).Utilizaremos el siguiente sketch para enviar una cadena desde la consola al Arduino y desde esté se enviará una respuesta en función de la cadena mandada. En este caso mandaremos la cadena "hola" y el Arduino contestará por serie ¡Saludos!.
Veamos detenidamente el código del sketch:
/*
* En este ejemplo leeremos comandos enviados desde la consola
* del IDE de Arduino y responderemos en función del mensaje recibido.
*
*
*/
#define SIZE_BUFFER 200 //Tamaño del buffer
String inputString = ""; // cadena que utilizaremos de buffer para los mensajes recibidos
boolean stringComplete = false; // variable que utilizaremos para saber si la cadena está completa. Comunmente se le suele llamar bandera o flag en inglés
void setup() {
// Inicializamos el puerto serie del Arduino a 9600 baudios y esperamos a que esté conectado
Serial.begin(9600);
while (!Serial) {
; // bucle esperando por la conexion USB
}
// Reservamos 200 bytes de memoria para la cadena que utilizaremos de buffer
inputString.reserve(SIZE_BUFFER);
// Mensaje de bienvenida
Serial.println("##### Ejemplo 4 Transmitiendo datos ####");
}
void loop() {
// Leemos del puerto serie hasta que se llene el buffer o haya un salto de linea
// Seteamos la bandera a false
stringComplete = false;
// Mientras haya datos disponibles leemos caracter a caracter del puerto serie
while (Serial.available() && !stringComplete) {
// Leemos un nuevo caracter:
char inChar = (char)Serial.read();
// lo concatenamos a inputString:
inputString += inChar;
// comprobamos si es un salto de linea o se ha llenado el buffer, si es así seteamos la bandera a true
if (inChar == '\n' || inputString.length() == SIZE_BUFFER) {
stringComplete = true;
}
}
/*
* Si se trata de una cadena válida actuamos en consecuencia y vaciamos el buffer
*/
if(stringComplete){
//Eliminamos el salto de linea si lo hubiese
inputString.replace("\n", "");
if(inputString.equals("Hola")){
Serial.println("¡Saludos!");
}else{
Serial.println("No entiendo tu mensaje: "+inputString);
}
// Limpiamos el buffer
inputString = "";
}
delay(500);
}
Este sketch es un poco más complejo que los anteriores por lo que lo detallaremos un poco más:- Se definen las variables que actuarán de bandera y de buffer (para almacenar la información recibida del puerto serie)
- En la función setup se configura el puerto Serie y se espera por su conexión.
- En el loop se lee del puerto serie mientras haya datos disponibles para leer y el ultimo dato recibido no sea un salto de linea o se haya llenado el buffer.
- Tratamos el mensaje recibido quitando el salto de línea si lo hubiese y comprobamos el contenido del mensaje. Dependiendo de este se envía por puerto serie la respuesta.
No hay comentarios:
Publicar un comentario