Arduino+Java: Ejemplo de LED Blink con Java Threads

12
2741

En los primeros posts que hice de Arduino, utilizé el ejemplo Blink.

En dicho ejemplo utilizábamos un delay de 1 segundo para provocar un parpadeo. En este post haremos lo mismo, sin embargo no colocaremos el delay en el código Arduino, sino en Java.

Para poder utilizar un delay en Java es necesario implementar los Hilos o Threads, los cuales ya vimos en un post pasado.

Crearemos una interfaz en Java con un botón de encendido y apagado, tal como lo hicimos en el post de Encender un LED desde la PC con Arduino y Java.

Los resultados obtenidos con dicho post los podemos apreciar en el siguiente video:


Ahora usaremos la misma interfaz, con solo algunas variaciones en el código.

Sin título

El código de los botones lo modificaremos ligeramente. Necesitaremos declarar una variable global del tipo boolean llamada state.

En dicha variable guardaremos el estado del LED, ya sea encendido(parpadeando) o apagado.

Eliminaremos la función enviar datos de los 2 botones que hemos colocado.

Sin títuloReemplazamos el «EnviarDatos()» por el state, que será true para encendido y false para apagado.

Sin embargo, para poder comunicarnos con Arduino tenemos que utilizar obligatoriamente la función EnviarDatos.

Esta será la función que manejaremos con los Threads. Declaramos una variable tipo Thread a la que llamaremos Hilo y la iniciaremos en el start del programa.

Sin título

Recuerden implementar la interfaz Runnable que es esencial para el uso de los Hilos.

Sin título

Esto también implica que se agregue el método public void run() al final del código.

Ahí es donde llamaremos a EnviarDatos().

El código para el método Run es el siguiente:

Esto funciona de la siguiente manera:

En la variable ct se guarda el CurrenThread que es el hilo que se esté ejecutando en determinado instante.

Mientras ct sea igual a Hilo que es el thread que declaramos, entonces se ejecutará determinado código.

Si la variable state es igual a true, es decir, LED encendido, entonces se entra en un ciclo en donde se enviará un «1» que es el que enciende el LED, se «dormirá» el hilo durante 1000 milisegundos, que es un segundo, luego se enviará un «0» que apagará el LED. Se espera 1 segundo más y luego se enciende el LED y así sucesivamente.

Sin título

Si la variable state cambia a falso, el programa no encontrará ningún código que ejecutar y permanecerá sin hacer nada.

Con el comando Thread.sleep(1000) podemos retrasar la ejecución de un hilo la cantidad de tiempo que nosotros decidamos.

En Arduino el código es extremadamente sencillo, el mismo que usamos en el post Comunicación Serial con Arduino: Encender luces desde el teclado de nuestra computadora.

Cargando este código en Arduino y ejecutando nuestro programa en Netbeans podemos probar si lo que hemos hecho funciona o no.

Como podemos observar en un momento cambié la frecuencia del parpadeo de 1 Hz a 10 Hz modificando el tiempo en el que el thread permanece «dormido».

Espero sus comentarios acerca de este tema. Saludos.

0 0 votes
Article Rating
Suscríbete
Notify of
guest

12 Comments
newest
oldest most voted
Inline Feedbacks
View all comments
adesmiro
adesmiro
11 years ago

exelente todo pero yo quiero hacerlo desde el entorno web de netbeans y no me funciona ayúdenme.

antonygarciagonzalez
11 years ago
Reply to  adesmiro

Lo siento pero no he trabajado nunca con el entorno web así que no tengo experiencia y por lo tanto no le puedo ayudar

Hugo Martínez
Hugo Martínez
11 years ago

Falta añadir estas dos líneas en el método Window()

Hilo = new Thread(this);
Hilo.start();

Así,

public Window() {
initComponents();
ArduinoConnection();
Hilo = new Thread(this);
Hilo.start();
}

antonygarciagonzalez
11 years ago
Reply to  Hugo Martínez

Gracias por la observación. Saludos

Carlos Andres Castaño
Carlos Andres Castaño
11 years ago

no me parpadea el led alguna idea??

antonygarciagonzalez
11 years ago

Java te arroja algún tipo de error?

Carlos Andres Castaño
Carlos Andres Castaño
11 years ago

no simplemente cargo el programa y al dar click en encender no pasa nada

antonygarciagonzalez
11 years ago

Lo tienes conectado al revés

Carlos Andres Castaño
Carlos Andres Castaño
11 years ago

no mira que pruebo el programa de encender y apagar el led y me funciona a la perfección pero cuando hago los cambios para que parpadee no me funciona, no se porque razon

Carlos Andres Castaño
Carlos Andres Castaño
11 years ago

si pudieses mandarme el programa al correo para compararlo con el mio te lo agradeceria, muchas gracias igual por querer ayudarme.

antonygarciagonzalez
11 years ago

En la noche publico el source code. Pensé que lo había hecho pero parece ser que no fue así.

Carlos Andres Castaño
Carlos Andres Castaño
11 years ago

ok gracias