Este artículo consiste en una breve demostración sobre el envío de múltiples datos simultáneos de Arduino a Java. Como ya saben muchos de ustedes, nosotros en Panama Hitek hemos creado la llamada librería PanamaHitek_Arrduino, que permite establecer comunicación entre Arduino y Java.
El siguiente video muestra una breve demostración de cómo programar un algoritmo con la capacidad de recibir múltiples datos enviados desde el Arduino hasta una aplicación en Java. Esto es especialmente útil cuando se tienen varios sensores conectados al Arduino y se desea enviar los datos capturados a una aplicación en Java.
Sobre este video he subidos algunos códigos de ejemplo a nuestro repositorio en Github. Por ejemplo, subiendo este código en Arduino y ejecutando este código en Java se puede apreciar el resultado del uso de la clase PanamaHitek_Multimessage, tal como se muestra en el video.
Esperamos que la información presentada sea útil para ustedes. Cualquier duda o comentario, no duden en escribirnos a través de la caja de comentarios.
buen día. quisiera saber como hacer que la posición de los datos no cambien ya que al momento de visualizar los datos enviados por el arduino al programa de java en los jtextfiel los datos empiezan a rotar por todos los cuadros de texto, como hago para que los datos que envía el arduino siempre conserve la misma caja de texto.
Hay una clase que se llama PanamaHitek_Multimessage que te sirve para resolver ese problema: https://panamahitek.com/envio-de-multiples-datos-simultaneos-de-arduino-a-java/
com.panamahitek.ArduinoException: Nomrbe del puerto – COM5; Nombre del método – arduinoRXTX (); Tipo de excepción – Puerto no abierto.
en com.panamahitek.PanamaHitek_Arduino.arduinoRXTX (PanamaHitek_Arduino.java:220)
Creo que estás tratando de abrir el puerto serie mientras el Monitor Serie esta abierto
gracias amigo
ahora tengo un problema
tengo un sensor ultra sonido que manda la distancia en este caso tengo un tanque elevado y mido la distancia del agua
esa distancia la envio desde el arduino a java
y recibo como un string
pero cuando convierto a un entero para hacer un if
me lanza arror
mi pregunta es como puedo convertir el dato que me llega
Que tipo de error? En la descripción del error debe estar la respuesta
La clase pública NumberFormatException este lanza
extiende IllegalArgumentException
Se lanza para indicar que la aplicación ha intentado convertir una cadena a uno de los tipos numéricos, pero que la cadena no tiene el formato adecuado.
Yo en java recibo tres datos que me llegan del arduino
El error claramente te está diciendo que estás tratando de convertir algo que no es un número en un número. Talvez sea que estás enviando un decimal con coma en vez de punto o algo así. Podrías tratar de imprimir lo que recibes como un String y verificar que en realidad estás recibiendo lo que esperas recibir
Puedo enviar multiples datos y mostrarlos en un Label, como podria hacerlo por que lo he intentado y no logro hacerlo
Si es posible
Buenas, se me presento un problema al utilizar la libreria: Estoy mandando 8 datos numéricos desde arduino a java con un delay(15), hice pruebas con delay de 15 a 100, y los datos que recibidos los quiero recibir en una jtable. El problema es que empiezo a recibir los datos cruzados o en algunos casos no me llegan los datos Parte del código en Java: public void serialEvent(jssc.SerialPortEvent arg0) { contador = 0; ArrayList lista = new ArrayList(); int[] obj = new int[8]; DefaultTableModel tmodelo = (DefaultTableModel) table.getModel(); try { if (mensage.dataReceptionCompleted()) { System.out.println(mensage.getMessage(0)); System.out.println(mensage.getMessage(1)); System.out.println(mensage.getMessage(2)); System.out.println(mensage.getMessage(3)); System.out.println(mensage.getMessage(4)); System.out.println(mensage.getMessage(5)); System.out.println(mensage.getMessage(6));… Read more »
Hola. Mira este video: https://www.youtube.com/watch?v=atzUeKeNQ-A
Se me presento un problema en la recepción de datos. Este es mi código Java: try { if(message.dataReceptionCompleted()){ System.out.println(«mensaje: «+contador++); System.out.println(«rdx: «+message.getMessage(0)); System.out.println(«rdy: «+message.getMessage(1)); System.out.println(«cdx: «+message.getMessage(2)); System.out.println(«cdy: «+message.getMessage(3)); System.out.println(«cix: «+message.getMessage(4)); System.out.println(«ciy: «+message.getMessage(5)); System.out.println(«rix: «+message.getMessage(6)); System.out.println(«riy: «+message.getMessage(7)) message.flushBuffer(); } } catch (ArduinoException | SerialPortException e) { e.printStackTrace(); } Mensajes enviados por terminal de arduino: 2 -2 3 -1 2 -2 5 -5 3 -3 4 0 1 -1 6 -6 4 -4 5 1 0 0 7 -7 Datos que imprime Java: mensaje: 1 rdx: 2 rdy: -2 cdx: 3 cdy: -1 cix: 2 ciy: -2 rix: 5 riy: -5 mensaje:… Read more »
Como declaraste la clase Multimessage?
static PanamaHitek_Arduino ino = new PanamaHitek_Arduino();
static PanamaHitek_MultiMessage message = new PanamaHitek_MultiMessage(8, ino);
Trata agregándole un pequeño delay en Arduino. La librería no está optimizada para recibir información muy rápido, así que ponle un delay de unos 25 ms entre cada envío talvez. Y prueba aumentando la velocidad de la conexión serie
En algún otro lenguaje de programación se podría captar los datos a esa velocidad?
El proyecto que estoy desarrollando es con 4 aceleremetros, cada acelerometro me da dos datos, eje «x» y «y».
En base a los datos que recibo de los acelerometros tengo que graficar y me dieron la siguiente restricción: velocidad de transmicion de datos entre 15 a 30 ms.
Ingeniero ya pude recibir correctamente los datos, muchas gracias!
Tenia razón, aumente la velocidad de 9600 a 115200 y funciono
Gracias!
Bien
Hola cuando llaamo al método arduinoRX(«COM8», 9600, listener); me saale el siguiente error com.panamahitek.ArduinoException: Nomrbe del puerto – COM8; Nombre del método – arduinoRX(); Tipo de excepción – Puerto no abierto.
Como habro el puerto; pense que el método ya habría el puerto
estoy usando la dependencia
com.github.PanamaHitek
PanamaHitek_Arduino
3.0.0
los felicito por tan buen material
Estás seguro de que el Arduino está conectado a COM8?
Buenas, En mi caso arduino envia un mensaje cada vez, pero este puede ser distinto. La placa envia un mensaje dependiendo de que color detecta el sensor. Una vez tengo los mensajes en Java, no se como tratarlos de distinto modo cada uno. Es decir, quiero ejecutar una acción concreta dependiendo del color que recibo. Pero cuando transformo el byte que me llega desde Arduino a String no parece que el programa lo reconozca. Te adjunto mi codigo arduino por si sabes detectar el error. Muchas gracias! //Compare Colours if (isGreen < isBlue){ if (isRed < isBlue){ if (isYellow <… Read more »
Antes de entrar en Java verifica que en el Monitor Serie se está mostrando la información tal cual la necesitas. Luego, pasas a Java. No veo la necesidad de que hagas la transformación a bytes, cuando en el video se muestra claramente que la librería cuenta con las herramientas necesarias para recibir los datos usando printMessage en combinación con isMessageAvailable.