Enviando datos de Processing a Galileo

Por: fjibarra

 

 

Introducción:

 

 

En esta segunda entrega de estos tutoriales, aprenderás a enviar datos a la tarjeta Galileo desde una interfaz diseñada en Processing para controlar una tarea, que para este caso se controlará el encendido y apagado de un LED.

 

La interfaz de Processing contará con un botón virtual, el cual al dar click sobre éste, transmitirá serialmente un dato que le informará a la tarjeta Galileo que deberá de encender o apagar el LED según sea el caso:

 

apagado--encendido.png

Equipo requerido:

 

  • Tarjeta Intel® Galileo
  • Fuente de poder para Galileo.
  • Cable microUSB
  • Placa de pruebas
  • Cable
  • Resistor
  • LED

 

Diagrama Esquematico:

 

Para este ejercicio armaremos el siguiente circuito con ayuda de una placa de pruebas:

 

Tutorial02_bb.png

Como podemos apreciar en el diagrama esquemático, conectaremos un LED con su respectiva resistencia entre el pin 13 y tierra, sin embargo, también podríamos utilizar solamente el LED que viene montado sobre la tarjeta Galileo y que también está conectado al pin 13:

 

2014-10-28 11.29(2).png

Código para la tarjeta Galileo:

 

En el código para este ejercicio, dentro de la función “loop” se verifica el estado del buffer serial mediante la función “Serial.available()”, la cual arroja el número de datos sin leer en el buffer del puerto serial:

 

int byteRecibido=0;  //Variable que almacenará el byte recibido

const int led = 13;  //Pin al que se conectará el LED

 

void setup(){

Serial.begin(9600);    //Inicialización del puerto serial a 9600 baudios

pinMode(led, OUTPUT);  //Se declara el pin 13 como salida

digitalWrite(led, LOW);//Apagar el LED inicialmente

}

 

void loop(){

  //Se comprueba si hay algún dato por leer en el buffer del puerto serial

  if (Serial.available() > 0){

byteRecibido=Serial.read();  //Lectura del dato recibido

if (byteRecibido=='A'){      //Comprobar que el dato recibido sea una "A"

if (digitalRead(led)==0)   //Rutina para encender o apagar el LED

digitalWrite(led, HIGH); //Encender el LED

      else

        digitalWrite(led, LOW);  //Apagar el LED

      }

  }

}

 

Probando el Código para la tarjeta Galileo:


Como podemos ver en el código anterior, la tarjeta Galileo espera a recibir una letra “A” por parte de la interfaz de Processing para poder encender o apagar el led, por lo que para comprobar la operación del código, utilizaremos nuevamente el monitor serial, en el cual escribiremos una letra “A” para cambiar el estado del LED:

 

monitorserial.png

Si observamos que el LED enciende y se apaga cada que enviamos una letra “A” entonces estamos listos para controlarlo con la interfaz que diseñaremos en Processing.


Código para Processing:


El siguiente código para Processing mostrará la interfaz que necesitamos, la cual enviará una letra “A” cada que presionemos el círculo central de la interfaz, el cual será como nuestro botón que nos permitirá encender o apagar el LED:


import processing.serial.*;

Serial miPuerto;

 

boolean estadoLED=false;

 

void setup() {

size(400, 400);

miPuerto = new Serial(this, "COM5", 9600);

textSize(30);

background(200);

stroke(255,0,0);

fill(255,0,0);

ellipse(200,200,200,200);

fill(0,0,0);

  textAlign(CENTER);

  textSize(25);

  text("Presione el Botón para",200,40);

  text("Encender o Apagar el LED",200,70);

  fill(255);

textSize(30);

text("¡Apagado!",200,200);

}

 

void draw(){

}

 

void mousePressed(){

if((pmouseX>100 & pmouseX<300)&(pmouseY>100 & pmouseY<300)){

background(200);

fill(0,0,0);

textSize(25);

text("Presione el Botón para",200,40);

text("Encender o Apagar el LED",200,70);

    textSize(30);

if(estadoLED==false){

      stroke(0,255,0);

      fill(0,255,0);

      ellipse(200,200,200,200);

      fill(255);

      textAlign(CENTER);

      text("¡Encendido!",200,200);

      estadoLED=true;

}

else{

      stroke(255,0,0);

      fill(255,0,0);

      ellipse(200,200,200,200);

      fill(255);

      textAlign(CENTER);

          text("¡Apagado!",200,200);

      estadoLED=false;

    }

  miPuerto.write('A');

  }

}


En este código, podemos ver que dentro de la función “draw” no estamos haciendo nada, sin embargo, estamos utilizando una función llamada “mousePressed()”, la cual se ejecutará cada vez que cualquier botón del mouse sea presionado. Para evitar la interfaz envíe la letra “A” aun cuando no se de click centro del perímetro del círculo, se utilizan las variables “pmouseX” y “pmouseY” para delimitar la acción de esta función:

 

if((pmouseX>100 & pmouseX<300)&(pmouseY>100 & pmouseY<300)){

 

Aun así, la interfaz responderá dentro de un área cuadrada cuyos lados son iguales al diámetro del círculo, pero es una muy buena primera aproximación:


areaAccionMouse.png


Video:



En resumen:


En este tutorial aprendimos a controlar un periférico muy básico conectado a la tarjeta Galileo desde una interfaz diseñada con Processing. Poco a poco iremos aumentando la complejidad de esta serie de tutoriales, con la finalidad de que puedas utilizar esta metodología de trabajo en tus proyectos.


En el siguiente tutorial de esta serie, realizaremos un multímetro muy sencillo con ayuda de los puertos analógicos de la tarjeta Galileo y de una interfaz diseñada en Processing.