En el post anterior les comentaba sobre los comandos básicos de Processing y un poco lo que es la comunicación serial entre este software y Arduino.
En la continuación de esta serie, se explicará un ejemplo para que ustedes mismos puedan empezar a intercambiar datos y a experimentar la poderosa unión de estas dos plataformas de software. El primer paso es crear nuestro programa en Arduino (en este caso usé un Arduino DUEMILANOVE):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
const int led = 13; // declaramos el pin 13 como led char valor = 0; // usamos una constante tipo char, ya // que van a ser letras los caracteres // que se van a enviar void setup() { Serial.begin(9600); // configura el puerto serial con una // velocidad de comunicación de 9600bps pinMode(led,OUTPUT); // configura led (pin13) como salida digitalWrite(led,LOW); // se coloca led con el estado en // bajo para iniciar } void loop() { if (Serial.available() > 0) // se abre el puerto serial // leyendo los datos de entrada { valor = Serial.read(); // el valor recibido por el puerto // serial se almacena en la // variable "valor" if (valor == 'E') // se compara el valor recibido // con la letra "E" { // si el valor es igual a "E" digitalWrite(led,HIGH); // enciende el led (pin13) } else if (valor == 'A') // sino se compara el valor recibido // con la letra "A" { // si el valor es igual a "A" digitalWrite(led,LOW);// apaga el led (pin13) } else // de lo contrario si se introduce { // un caracter que no sea "E" ni "A" Serial.println("Caracter NO PERMITIDO"); // imprime // vía serial } } } |
Debemos tener en cuenta que primero se debe quemar el programa en la placa Arduino via Serial (recordar elegir el puerto COM correspondiente al Arduino y el modelo de placa que estamos usando).
Para este ejemplo se utilizó una velocidad de comunicación de 9600 baudios o bps en ambos programas. Luego de haber grabado el programa, abrimos Processing para desarrollar el programa correspondiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
import processing.serial.*; // invocar la librería Serial Serial puerto; // se declara una variable para la com. serial void setup() { puerto = new Serial(this,"COM6", 9600); // se le asigna el puerto COM6. En este caso, lo vi // en el administrador de dispositivos (windows) size(300,150); // se crea una ventana de 300 píxeles de ancho // por 150 píxeles de alto } void draw() { background(0,0,0); // fondo en formato RGB = blanco // ------------------------------------------------- // fill(0,204,51); // color del texto textSize(16); // tamaño del texto textAlign(CENTER, TOP); // alineación del texto text("Led interno del Arduino",150,25); // texto, posición X,Y stroke(90); // línea bordeada strokeWeight(2); // grosor de la línea bordeada // ---------- CUADRO 1 ---------- // fill(255,255,255); // relleno del cuadro 1 rect(50,60,80,40,10); // (A,B,C,D,E) // A = Posición en X ~~ B = Posición en Y // C = Ancho del rectángulo ~~ D = Alto del rectángulo // E = Borde del rectángulo fill(0,0,0); // color del texto = blanco text("ON", 90, 70); // texto, posición X,Y // ---------- CUADRO 2 ---------- // fill(255,255,255); // relleno del cuadro 2 rect(175,60,80,40,10); // texto, posición X,Y fill(0,0,0); // color del texto = blanco text("OFF", 215, 70); // texto, posición X,Y } void mousePressed() { if((mouseX>50 & mouseX<130) & (mouseY>60 & mouseY<100)) // evaluar si el botón de "ON" es pulsado // EjeX"ON"= 50(inicio del cuadro) + 80(largo del cuadro)= 130 // EjeY"ON"= 60(inicio del cuadro) + 40(alto del cuadro)= 100 // mouseX= coordinada en X del cursor // mouseY= coordinada en Y del cursor { fill(60,60,60); // color del botón al ser presionado rect(50,60,80,40,10); // crear rectángulo 1 puerto.write('E'); // enviar la letra "E" por el puerto creado para que el // carácter sea recibido por el puerto serial del Arduino // y de esta forma encender el led. println("Led ENCENDIDO"); // imprimir en pantalla estado del // led para verificar que está // ejecutando la función } if((mouseX>175 & mouseX<255) & (mouseY>60 & mouseY<100)) // evaluar si el botón de "OFF" es pulsado // EjeX"OFF"= 175(inicio del cuadro) + 80(largo del cuadro)= 255 // EjeY"OFF"= 60(inicio del cuadro) + 40(alto del cuadro)= 100 // mouseX= coordinada en X del cursor // mouseY= coordinada en Y del cursor { fill(60,60,60); // color del botón al ser presionado rect(175,60,80,40,10); // crear rectángulo 2 puerto.write('A'); // enviar la letra "A" por el puerto creado para que el // carácter sea recibido por el puerto serial del Arduino // y de esta forma apagar el led. println("Led APAGADO"); // imprimir en pantalla estado del // led para verificar que está // ejecutando la función } } |
Para ejecutar el programa en Processing, debemos pulsar el botón de PLAY, luego de esto empieza a ejecutarse. Ahora veamos un video con la explicación rápida del programa:
Nos vemos en otra entrega. Saludos.
existe alguna biblioteca de controles de Processing como los de labview?
No creo. No estoy seguro, pero muy probablemente no.
Me sale error cuando activo el Monitor Serial del arduino, COM8 Port Busy.
Si no activo el monitor Serial del arduino funciona perfecto https://uploads.disquscdn.com/images/2eb1e400567742cfb4e5828eec8fd434f3f760f71b20d2794c3e11a48e89a344.jpg
Cierra tu puerto serial de arduino, solo puede estar uno abierto a la vez. O el de processing O el de arduino, no los dos a la vez