Arduino+Java: Ejemplo de LED Blink con Java Threads

12
1958

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.

12 Comentarios

  1. 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();
    }

Dejar respuesta

Please enter your comment!
Please enter your name here