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.
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
existe alguna biblioteca de controles de Processing como los de labview?
No creo. No estoy seguro, pero muy probablemente no.