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

14
74

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

  • Isaac Ramirez Huston

    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

    • Antony García González

      Es sólo cuestión de integrar la lógica de este ejemplo a la de la pantalla en cuestión

  • Fernando Basantes

    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

  • Antony García González

    Búscalo entre nuestros contenidos

  • Alex Robledo

    no inventen eso se hae con conversion directa entre variables…

    • Antony García González

      A qué te refieres

  • Jorge Regino de Hoyos

    Como haría eso mismo con tu nueva librería PanamaHitek_Arduino?? no he podido hacerlo

  • Arafael Cont

    hola
    quería saber si es posible que ayudes tengo problemas al momento de mandar el mensaje
    gracias y que buen proyecto

  • Pretty! This has been a really wonderful article.
    Thanks for providing this info.

  • Hi, its good article about media print, we all be aware of media is a wonderful source of
    data.

  • 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!