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

20
4304

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().

 

 

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

 

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().

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.

 

 

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.

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

20 Comentarios

  1. Que tal, me aparece un error al correr el JFrame, dice algo asi de que:
    error: package gnu.io does not exist
    Si seria tan amable de ayudarme.
    Gracias

  2. mi pregunta seria……como hacer esto mismo pero con una pantalla LCD Tft a color de 1.8Pulgadas, donde se muestre en vez de texto imágenes????? :/ todo se manda a leer con algún SetData? o como seria en este caso? ayuda

  3. Disculpen me pueden ayudar. Lo que pasa es que hice todo exactamente igual pero al momento de enviar los digitos en el lcd no se muestra nada. Que puede ser? Me pueden ayudar con el diagrama utilizado aqui? Ya probe con el que esta en el anterior post. Por favor es de urgencia. Muchas gracias

  4. It is perfect time to make some plans for the future
    and it is time to be happy. I have read this publish and if I may
    just I want to counsel you few fascinating issues or advice.

    Perhaps you can write subsequent articles relating to this article.
    I desire to read even more things approximately
    it!

Dejar respuesta

Please enter your comment!
Please enter your name here