ARDUINO 008 COMUNICACIÓN CON EL EXTERIOR A TRAVÉS DEL PUERTO SERIE

COMUNICACIÓN CON EL EXTERIOR A TRAVÉS DEL PUERTO SERIE
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:
  1. Se definen las variables que actuarán de bandera y de buffer (para almacenar la información recibida del puerto serie)
  2. En la función setup se configura el puerto Serie y se espera por su conexión.
  3. 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.
  4. 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