Panama Hitek Logo
Panama Hitek Logo

Librería PanamaHitek_Arduino, v3.2.0 (actualizado 10/11/2020)

***A partir de la versión 2.2.0 no es necesario el uso de la librería RXTX para que la librería Arduino librería PanamaHitek_Arduino trabaje. Ahora solo es necesario importar la librería PanamaHitek_Arduino a los proyectos en Netbeans, sin tener que preocuparse por la RXTXcomm. Luego de la versión 2.6.0, esta librería ha sido nombrada PanamaHitek_Arduino.

Desde la versión 2.7.0 no es necesaria la instalación de los archivos dll, ya que la librería crea automáticamente la ruta C:/JavaRXTX (sólo en Windows), donde almacena estos archivos y los pone a disposición de nuestra aplicación.

En la versión 2.8.0 se ha reemplazado la librería RXTX en favor de Java Simple Serial Connector y se ha agregado compatibilidad para sistemas operativos Linux, Mac y Solaris, además de Windows.

En la versión 3.2.0 he agregado soporte para el uso de esta librería con JDK 11, lo cual elimina la limitación de no poder usarla por encima del JDK 1.8.

____________________________________________________________

Aquí les presento mi librería Arduino PanamaHitek_Arduino en su versión 3.2.0.

La librería está disponible en nuestro repositorio en GitHub y en SourceForge. También pueden agregar nuestra librería a sus proyectos Maven agregando el repositorio de Jitpack:

La librería PanamaHitek_Arduino debe ser agregada como una dependencia:

En este post publicaré los métodos que contiene la librería y los parámetros de los mismos.

Métodos de la versión  1.1.0

Método

Descripción

arduinoRX(string nombre del puerto, int time out, int baud rate, SerialPortEventListener evento) Este método se utiliza para iniciar la conexión de Java con Arduino SOLAMENTE PARA LA RECEPCIÓN DE DATOS. En el nombre de puerto se coloca el COM#, o sea el puerto COM donde esté conectado Arduino, el time out es el tiempo de espera (yo uso 2000), el baud rate debe ser el mismo que se usa en Arduino IDE (generalmente 9600) y el Serial PortEventListener debe ser una variable declarada antes de utilizar este método. */
arduinoTX(string nombre del puerto, int time out, int baud rate) Este método se utiliza para iniciar la conexión de Java con Arduino SOLAMENTE PARA LA TRANSMISIÓN DE DATOS. */
arduinoRXTX(string nombre del puerto, int time out, int baud rate, SerialPortEventListener evento) Este método se utiliza para iniciar la conexión de Java con Arduino PARA LA TRANSMISIÓN Y RECEPCIÓN DE DATOS. */
sendData(String data) Método utilizado para enviar datos a Arduino. Los datos se deben enviar como cadena de texto (string). */
receiveData() Devuelve un dato recibido a través del puerto serie. Este dato será numérico en formato ASCII por lo que se debe traducir de decimal a caracter. */
MessageAvailable() isMessageAvailable() Devuelve un valor boolean que nos indica si hay algún mensaje disponible para imprimir. Dicho mensaje DEBE ser enviado desde Arduino utilizando Serial.println(); */
printMessage() Devuelve una cadena de caracteres que contiene el mensaje que ha sido enviado desde Arduino, pero traducido a caracteres. SE DEBE UTILIZAR DENTRO DE UNA ESTRUCTURA CONDICIONAL UTILIZANDO MessageAvailable(). Cuando haya un mensaje disponible, se imprime utilizando este método. */

 

Métodos de la versión 1.3.0

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

getPortsAvailable()

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

Métodos de la versión 2.5.0

showMessageDialogs(boolean Input) Permite activar o desactivar las ventanas emergentes que se muestra cuando ocurre un error en tiempo de ejecución
sendByte(int data) Similar a sendData, solo que en este método se envía un Byte en vez de una cadena de caracteres.

Métodos de la versión 2.6.0

getSerialPorts() Devuelve una lista con los puertos disponibles. Reemplazo de NameSerialPortAt();
setParity(int input_Parity) Se establece la paridad (nula por defecto)
setStopBits(int Bytes) Se establecen los StopBits (1 por defecto)
setByteSize(int Bits) Se establece la cantidad de Bytes que se manejará (8 por defecto)
setTimeOut(int time) Se establece el TimeOut (2000 milisegundos por defecto)

Métodos de la versión 2.8.0

flushSerialPorts() Se limpia los buffer de entrada y salida del puerto serie
getInputBytesAvailable() Devuelve la cantidad de bytes disponibles para ser leídos en el buffer de entrada del puerto serie
getEventListener() Devuelve el event listener que se agrega al serialPort cuando se utilizan los métodos arduinoRX() y ardunoRXTX()

A partir de la versión 2.1.0 se agrega soporte para la lectura de múltiples mensajes enviados desde Arduino. Esto se ha hecho por la dificultad que presenta algunos usuarios con la lectura de múltiples sensores en Arduino y desean enviar estos datos a Java. Ahora se ha creado una nueva clase, llamada MultiMessage.

Si deseamos leer varios sensores, necesitamos instanciar MultiMessage en nuestra aplicación de la siguiente manera:

MultiMessage nombre_del_objeto = new MultiMessage(numero de sensores a leer, instancia de la clase PanamaHitek_Arduino)

Si se desea, por ejemplo, leer 3 sensores, se trabajaría se la siguiente manera.

La clase MultiMessage posee los siguientes métodos.

Métodos de la clase MultiMessage

Método

Descripción

DataReceptionCompleted()

Devuelve un valor tipo boolean que indica si se ha terminado de recibir las lecturas indicadas en la instancia de la clase (si se declara que habrá 3 lecturas, este método sólo devolverá true cuando se haya leído los 3 valores)

getMessage(int index)

Devuelve un dato tipo String con la lectura del sensor indicado en el index

flushBuffer

Elimina la información almacenada en el buffer de datos. Se debe usar una vez se haya terminado de leer los sensores con el getMessage(). Al utilizar este método será posible hacer una nueva lectura.

Se debe recordar que para utilizar esta librería se debe importar la librería a los archivos del proyecto. También se necesita la librería RXTX.

  • Si se va a usar la conexión RX o la RXTX, hay que declarar un SerialPortEventListener y se debe agregar los métodos de esta clase (Java lo hará automáticamente).
  • Si se utiliza receiveData() se recibirán los datos directamente desde Arduino, en formato ASCII (decimal). 
  • Si se usa printMessage() se recibirán los mensajes desde Arduino traducidos a caracteres y ordenados por líneas. SE DEBE USAR PRINTLN EN ARDUINO y se recomienda que este método sólo se use cuando isMessageAvailable() devuelva un valor true.

Acá les dejo un video actualizado donde se muestra un ejemplo del funcionamiento de la librería.

Espero que la información proporcionada sea de utilidad para ustedes. Si tienen algún comentario no duden en hacérmelo llegar.

DOI

Post relacionados