domingo, 7 de diciembre de 2014

Comunicación con arduino mediante Serial

Buenos días! Ya está resuelto el problema con 1&1, así que la web vuelve a estar abierta!!

En el último post hablábamos de como controlar mediante arduino dispositivos externos pero, ¿quién controla a los vigilantes arduino?

Hay muchas formas de poder conectar con Arduino: desde el usb, puerto serie o las entradas de lectura/escritura de los pines (RX, TX) (donde podríamos conectar un bluetooth, por ejemplo). Pero todas estas formas tienen algo en común, el mandato Serial.

La idea es la siguiente: enviar por puerto serie una palabra, clave o lo que sea para que arduino lo capte, interprete y ejecute. El siguiente código es lo que hace y lo he comentado para que se vea, paso a paso, como trabaja con la estructura.

//Interprete

int ASCII = 0;  //Codigo ASCII del caracter encontrado
char incomingByte = 0; //String por RX
String comando = ""; //Inicialización del string


//Parametros Iniciales
int pinLuz = 52; //Por poner un pin cualquiera
boolean terminado = false; //Indica si se termino de recorrer la palabra entrante.
int x; //Contador


void setup() {
 Serial.begin(9600); //Con esto se abre el puerto serial a los baudios deseados
 pinMode(pinLuz, OUTPUT);
}

void loop(){
 while (Serial.available()>0){
  ASCII = Serial.read(); //Almacena lo que recibe por el puerto serie
  incomingByte = ASCII; //Número2ASCII


  //INFO
  /*
  El caracter 32: espacio.
  El caracter 13: retorno de carro.
  El caracter 10: salto de línea.
  */

  if (ASCII!=13 && ASCII!=10 && ASCII!=32){
   comando = comando+incomingByte; // comando es un contenedor que va almacenando los carácteres
  }
  if (ASCII==10 || ASCII==13 || ASCII==32){
   terminado = true; //Se ha terminado de recibir toda la instrucción
  }
  }    

 //Nada en la cola del serial, pero si datos en el contenedor
 while (Serial.available() <=0 && terminado==true) {
  //Funcion interprete: se encargará de ejecutar el comando
  interprete(comando);

  //Limpio los datos
  comando = "";
  terminado = false;
 }
}

void interprete(String comando){
 if (comando != ""){
 //LISTA DE COMANDOS
         if (comando == "LUZ_ON"){
   luzOn();
         {
         if (comando == "LUZ_OFF"){
   luzOff();
         {
 }
}


//FUNCIONES DE LOS COMANDOS
void luzOn(){
 digitalWrite(pinLuz, HIGH);
}

void luzOff(){
 digitalWrite(pinLuz, LOW);
}

Siguiendo como ejemplo éste fragmento de código se podrá fácilmente encender o apagar las luces de las que hablábamos en la entrada anterior. Como se ve no es difícil una vez llegados a éste punto, un poco de programación y algo de maña pelando cables y rápidamente tendremos nuestro pequeño proyecto en marcha.

Pero aquí es donde el proyecto empieza a ampliarse y viene lo divertido... nosotros podemos comunicarnos por el puerto serie desde la consola del GUI de arduino, pero claro, eso no es lo que queremos. Para abrir una persiana resulta más cómodo darle a un interruptor que escribir un mandato por un programa. Entonces, ¿para que todo esto? Las formas lo son todo, y escribir el mandato desde la GUI no es la forma adecuada. Hay muchas formas de hacerlo y yo me he acostumbrado a comunicarme por python. En la siguiente entrada más código para que podamos continuar! Un saludo!

No hay comentarios:

Publicar un comentario