Librería Arduino para Java, versión 2.0.0

A pesar que ayer lancé la versión 1.3.0 de la libreria Arduino para Java, estoy en el día de hoy, a menos de 24 horas de mi más reciente actualización, lanzando la versión 2.0.0 de mi librería.

He decidido llamarla la versión 2.0.0 debido a que representa un importante salto desde la versión anterior. Ahora esta librería puede trabajar sin de la librería RXTX, al menos externamente (Cabe destacar que si se requiere hacer uso del SerialPortEventListener, sí se necesita implementar la librería RXTX debido a que dicha función no es característica de la librería Arduino). Esto quiere decir que ya no es necesario importar ambas librerías, Arduino y RXTX para poder comunicar un programa en Java con Arduino. A pesar de esto, aún es necesario instalar la librería RXTX, es decir, colocar los archivos en la ruta de Java. Los pasos para esto se encuentran en el siguiente video:


El archivo jar puede ser descargado desde el siguiente enlace:

Toda la documentación de la librería se encuentra disponible en el siguiente enlace:

Espero que entre todos me ayuden a probar el código y a encontrar posibles fallos en el código. Saludos.

Leer Más

Libreria Arduino para Java, versión 1.3.0

La más reciente versión de mi compilación de métodos para utilizar micro controladores con un poderoso lenguaje de programación, la libreria Arduino para Java…

 

Estoy lanzando al público la librería Arduino para Java, en su versión 1.3.0, con algunos nuevos métodos que por petición de los usuarios de mi blog he decidido agregar a las funcionalidades de la librería.

libreria arduino para java

El archivo que contiene dicha librería se encuentra disponible en el siguiente enlace:

Descargar Libreria Arduino para Java

El artículo principal donde se documenta mi librería es el siguiente:

En dicho post se explican los métodos utilizados en las anteriores versiones de la libreria Arduino para Java, y algunos videos donde explico como instalar e implementar la misma en proyectos en Java.

Entre los nuevos métodos que se han agregado, se destaca:

Método

Descripción

KillConnection()

Permite finalizar la conexión entre Arduino y la computadora sin tener que finalizar la aplicación que se esté ejecutando, como en versiones anteriores.

SerialPortsAvailable()

Devuelve un valor tipo int con la cantidad de dispositivos conectados a la computadora por medio del Puerto Serie.

NameSerialPortAt(int index)

Devuelve una cadena de caracteres con el nombre del Puerto Serie que esté en el índice que se establece como parámetro. Si se utiliza dentro de un ciclo for con el valor devuelto por SerialPortsAvailable() se pueden obtener los nombres de todos los Puertos Serie en uso. Ejemplo: (COM3, COM4, COM5, etc).

La libreria Arduino para Java es una compilación de código que yo utilizo para mis ensayos personales. He decidido compartirla con ustedes para facilitarle sus proyectos. La disposición de los métodos incluidos en la compilación depende de mis necesidades, a excepción de ciertas cosas que he decidido agregar según la petición de algunos de mis lectores.

Espero que el material publicado sea útil para ustedes. Espero sus comentarios. Saludos.

Leer Más

Librería Arduino para Java versión 1.1.0

Hola a todos.

He actualizado la librería Arduino para Java.

Entre los cambios que se han efectuado están:

  • Se ha corregido un error que impedía a la librería reconocer Arduino cuando habían más de dos puertos COM instalados.

He aquí el post donde explico cómo utilizar la librería Arduino:

Librería Arduino para Java (Actualizado el 4/6/2013)

Acá está el troubleshoot que acompaña esta librería:

Librería Arduino para Java: Troubleshoot

Por último les dejo el enlace para descargar la librería:

Descargar librería Arduino versión 1.1.0

Aquí está el código fuente de la librería en Java:

Descargar código fuente

Debo extenderle un agradecimiento muy especial a Ronald Alberto Montealegre Mora (ronald_monte@hotmail.com) de la hermana República de Ecuador que ha aportado sus valiosos conocimientos para mejorar el funcionamiento de esta librería que ha sido creada para el beneficio de todas aquellas personas interesadas en aprender el uso de las nuevas tecnologías de hoy en día.

Espero que todas aquellas personas que estén interesadas en contribuir a este proyecto me hagan llegar sus inquietudes y/o aportes y con gusto las implementaré a mi proyecto.

Mil gracias.

Leer Más

Arduino+Java: Ejemplo de LED Blink con Java Threads

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.

Leer Más

Comunicación Serial: Enviando datos de Arduino a Java

La información suministrada en este post es considerada por mi persona como obsoleta debido a que fue publicada antes de mi librería Arduino para Java. Recomiendo visitar el siguiente post donde se explica el uso de la misma y donde es muy fácil comunicar Arduino con Java y vice versa.

***

Hola amigos. En las últimas semanas he estado escribiendo mucho acerca de Arduino, de Java y de como podemos utilizar ambas plataformas para realizar grandes proyectos. Empecé escribiendo como establecer Comunicación Serial con Arduino. Luego escribí como enviar datos de Java a Arduino a través de los métodos ArduinoConnection() y EnviarDatos().

Ahora es tiempo de aprender como recibir datos en Java desde Arduino. Para ello utilizaremos un método similar a EnviarDatos(): RecibirDatos().

Para poder utilizar este método necesitamos modificar nuestra función ArduinoConnection() y declarar algunas variables.

Los datos que enviamos de Arduino a Java se envían a través de una variable OutputStream llamada Output. Ahora declararemos una variable del tipo InputStream llamada Input.

private InputStream Input;

Resumiendo, las variables que necesitamos utilizar para comunicar Arduino y Java, y vice versa, son las siguientes:

 

Sin título

Ahora necesitamos inicializar la variable Input. Esto se hace en la función ArduinoConnection() donde ya existe una línea que inicializa la variable Output.

 

Como vemos, se prepara a la variable Input de la misma manera que a la variable Output. Hemos agregado 2 líneas más a nuestra función ArduinoConnection():

Esto permite que se genere un evento cada vez que Arduino envíe datos a Java. Para poder que esto funcione es necesario que implementemos la interfaz SerialPortEventListener de la misma manera que implementamos la interfaz Runnable cuando utilizamos los Java Threads.

Sin título

Por último necesitamos agregar un método en donde se establezca las acciones que se harán cuando ocurra un SerialPortEvent.

 

Por último agregamos RecibirDatos():

Con estas variables y estos métodos podemos lograr lo que queremos. Ahora es tiempo de probar si funciona o no.

Yo agregué los elementos necesarios al ejemplo Blink que ya hicimos:

Ahora vamos a Arduino y escribimos lo siguiente:

Con estos cambios estamos listos para ver como trabaja nuestro código. Lo que haremos es enviar el valor de una variable, en este caso, count, de Arduino a Java, con la salvedad de que cada segundo se aumentará el valor de count en 1 unidad.

Utilizamos Serial.print para enviar el mensaje. Si utilizamos println enviaremos el mensaje con un salto de renglón. Si utilizamos Serial.write, entonces no enviaremos el mensaje en ASCII sino como bits. El problema con esto es que es un bus de 8 bits, por lo que no podremos enviar valores más arriba del 255, ya que 2 elevado a la octava potencia es 256 y el bus solo admite 8 bits, del 0 al 255.

Aquí vemos la demostración:

Como podemos observar los datos se envían 1 a 1, es decir, caracter a caracter.

Espero sus comentarios. Saludos.

Leer Más

Arduino + Java: Enviando mensajes a pantalla LCD desde Java con Arduino

En este post explicaré como podemos enviar una cadena de caracteres desde una interfaz Java a una pantala LCD utilizando Arduino.

En mi anterior post vimos como utilizar una pantalla LCD con Arduino.

Lo primero que explicaré será como crear la interfaz en Java. Nos vamos a Netbeans IDE y creamos un proyecto llamado LCDprinter.

Yo coloqué un jFrame con los siguientes controles:

Netbeans IDE

A mis controles le coloqué los siguientes nombres:

Netbeans IDE

Como programador soy un poco Old School y tiendo a dejar los nombres de los controles con el prefijo que los identifica (jButton, jFrame, JLabel, jTextField, etc…) y luego escribo el nombre que le quiero dar.

El código es bastante sencillo. Aparte de la función ArduinoConection() y EnviarDatos() solo se utilizará una función a la que he llamado letras().

  1. [crayon-546f6294167aa896155485/]

 

Netbeans IDE

Ahora vamos a definir cuando llamaremos a esta función. Queremos que a medida que vamos escribiendo en el jTextField se vaya actualizando la cantidad de caracteres disponibles.

Utilizaremos un evento llamado KeyReleased.

Java permite utilizar eventos con sus componentes, los cuales estaremos viendo de manera más detallada en futuras aportaciones.

El evento KeyReleased se ejecuta cada vez que una tecla pasa de estar presionada a cuando el usuario deja de presionarla. Al escribir presionamos las teclas de nuestra computadora, por lo que este evento se ejecutará cada vez que introduzcamos un caracter.

Para establecer las acciones que se ejecutarán en el evento KeyReleased, vamos a el jTextFieldMensaje, le damos clic derecho, vamos a eventos/events, Key, KeyReleased.

Netbeans IDE

Se nos abrirá la ventana de código y entre las líneas que nos aparecen escribimos letras().

Netbeans IDE

Ahora programaremos los botones.

El botón “Enviar Texto” tendrá el siguiente código.

EnviarDatos(jTextFieldMensaje.getText());
jTextFieldMensaje.setText(“”);
letras();

Con esto le enviamos a Arduino el contenido del TextField.

El botón “Limpiar Texto” tendrá el siguiente código:

jTextFieldMensaje.setText(“”);
letras();

En ambos casos se limpia el contenido del jTextFieldMensaje y se actualiza la cantidad de caracteres.

Un último toque que le agregaremos: la posibilidad que al presionar ENTER el mensaje se envíe.

Le damos clic derecho al TextField y buscamos el evento Action/ActionPerformed.

Este permite que cuando alguien teclea ENTER mientras está escribiendo en un TextField, se ejecute determinado comando.

Ahi colocamos:

EnviarDatos(jTextFieldMensaje.getText());
jTextFieldMensaje.setText(“”);

Cuando hagamos esto el código nos debe quedar de la siguiente forma:

Netbeans IDE

No olviden colocar ArduinConnection() y EnviarDatos(), junto con las variables que hacen posible la comunicación Arduino-Java.

Netbeans IDE

[crayon-546f6294167c8865770751/]

Con esto debe ser suficiente para que podamos hacer lo que queremos hacer. Ahora vamos a Arduino IDE.

Cuando Java envía letras a Arduino a través del puerto Serie, Arduino las recibe en código ASCII, por lo que necesitamos transformar cada variable. Usaremos una función que yo mismo he preparado para este propósito. Se llama Decimal_to_ASCII().

[crayon-546f6294167d5785970454/]

Solamente se utiliza un switch, que ya lo vimos en el post Java+Arduino: Enciendiendo un LED RGB desde un programa en nuestra PC.

Reemplazamos los números por caracteres y devolvemos un char que será el que vamos a imprimir en la pantalla LCD.

[crayon-546f6294167e3962939110/]

Estamos listos con la programación. Para probar esto utilizaré el Arduino Nano que previamente adapté a la placa perforada y a la pantalla LCD.

2013-02-08-219 2013-02-08-220

Ahora estamos listos para probar si lo que hemos hecho funciona o no.

Si tienen alguna preguntas, sugerencias o comentarios no duden en contactarme.

Los archivos de este proyecto están disponibles en Google Drive.

https://docs.google.com/folder/d/0B0hsUkhqWH97elQtOU42aTlHTGc/edit?usp=sharing

Leer Más