***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:
1 2 3 4 |
<repository> <id>jitpack.io</id> <url>http://jitpack.io</url> </repository> |
La librería PanamaHitek_Arduino debe ser agregada como una dependencia:
1 2 3 4 5 |
<dependency> <groupId>com.github.PanamaHitek</groupId> <artifactId>PanamaHitek_Arduino</artifactId> <version>3.0.0</version> </dependency> |
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 |
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 |
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 |
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. */ |
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. |
getPortsAvailable() |
Devuelve un valor tipo int con la cantidad de dispositivos conectados a la computadora por medio del Puerto Serie. |
|
|
Métodos de la versión 2.5.0
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.
1 2 3 4 5 6 7 |
//Se crea un obteto llamado Arduino para instanciar la clase Arduino //De la librería <del>Arduino para Java</del> PanamaHitek_Arduino PanamaHitek_Arduino Arduino = new PanamaHitek_Arduino(); //Se instancia un objeto de la clase MultiMessage //Se indica que se van a leer 3 sensores y que la clase Arduino fue instanciada //mediante el obteto Arduino PanamaHitek_multiMessage multi = new PanamaHitek_multiMessage(3, Arduino); |
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.
Un saludo, descargue la versión 3.2.0 PanamaHitek_Arduino y me curre el siguiente error uso Eclipse y el JDK 11 : Exception in thread «main» java.lang.Error: Unresolved compilation problems: The type jssc.SerialPortException cannot be resolved. It is indirectly referenced from required .class files The method sendData(String) from the type PanamaHitek_Arduino refers to the missing type SerialPortException SerialPortException cannot be resolved to a type at Principal.main(Principal.java:232) No soy muy bueno entendiendo, importe la librería y la agregue tal como vi en varios videos para agregar librerias pero ese error no se resuelve la solución que me da java es Open the Java… Read more »
me da el error cuando trate de hacer el arduino.sendData(«1»);
Trata de probar este código en Java:
https://github.com/PanamaHitek/PanamaHitek_Arduino/blob/master/src/test/java/examples/arduino/txExample.java
Y este en un Arduino:
https://github.com/PanamaHitek/PanamaHitek_Arduino/blob/master/src/test/java/examples/arduino_sketches/tx_example.ino
Si no funciona me avisas.
Gracias, trate de probarlo pero en las primeras lineas de el ejemplo que mandaste me sale The type jssc.SerialException cannot be resolved. It is indirectly referenced from required .class file
y The import jssc.SerialException cannot be resolved
y nuevamente me manda a Open the Java build path property page of project ‘Champions League’
Hola,
Me pasa igual que al compañero. Estoy usando netbeans 12 con jdk11 con la version 3.2.0 de la libreria. Cuando uso sendata me marca ese error el ide.
El problema está en que hay que instalar la libreria jssc-2.9.2.jar.
Si lo haces desde Maven se instala automáticamente, si lo haces con Ant tienes que buscartela.
Un saludo
Buenas Ing Antony, disculpe la molestia, pero estoy muy novato en este tipo de cosas, y veo que usted ya sabe como hacerlo. La pregunta es, si quisiera usar una librería como POI así como usted lo hiso, debo de publicar mi código para que sea accesible por todos?
De antemano gracias por su tiempo.
Este post te debe ayudar:
https://panamahitek.com/jar-ejecutable-con-dependencias-incluidas-en-java/
Me gustaría saber si es posible usar la biblioteca panamaHitek en una aplicación web java spring boot?
No creo que funcione. No está hecho para web
Buen día amigo soy un estudiante de licenciatura y no eh podido instalar e implementar las librerías de Arduino para Java ya que tu video de youtube tiene bastantes años de que se realizo y actualmente todas las librerías son nuevas y con diferentes nombres y versiones. No sé si podrías ayudarme en crear otra explicación nueva de como incorporar estas nuevas librerías.
Muchas gracias y saludos.
Cual es tu dificultad?
Buenos dias tardes o noches, mi duda es como puedo usar un dato arrojado por el arduino (por ejemplo cuando presione un boton fisico ,el arduino me manda al monitor serie un «activado»)luego usar ese dato para desactivar un boton en una aplicación en java. de antemano muchas gracias
Eso es una duda de programación, no del uso de la libreria
muy buen aporte pero tengo unda duda ocupo ayuda
el problema es que tengo que hacer in indoor con arduino que mande los datos a java y se guarde en unabase dedatos tu codigo lo tengo pero me marca error en el catch y no entiendo porque ayuda porfavor
Hola Amigo, ante todo me disculpo por mi ignorancia, soy estudiante de ultimo año de secundaria, un entusiasta al que se le encargó crear un reloj capaz de tocar el timbre automáticamente. Investigué al respecto y dí con esta gran librería, ví sus videotutoriales y logré construir una interfaz para programar el dispositivo, el programa consta de java con maven y corre sin problema dentro de NetBeans. Lo compile con el ultimo JDK (16), al construír el proyecto me dirijo a la carpeta e intento ejecutar el archivo .jar pero no pasa nada. ¿Qué podría hacer para construírlo correctamente?
Hola.
Recomiendo usar JDK 11, incluso el 1.8 si te es posible.
Usa este post: https://panamahitek.com/jar-ejecutable-con-dependencias-incluidas-en-java/
HOLA Antony García González tuve un problema al correr en netBeans 8.2 tengo el JDK 1.8 ======================================== el error que me sale es la siguiente sera que me puede ayudar? ======================================== PanamaHitek_Arduino Library, version 3.0.0 ============================================== Created by Antony Garcia Gonzalez Electromechanical Engineer and creator of Project Panama Hitek This library has been created from Java Simple Serial Connector, by Alexey Sokolov You can find all the information about this library at https://panamahitek.com # # A fatal error has been detected by the Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000000064b5db, pid=8296, tid=0x0000000000002abc # # JRE version: Java(TM) SE… Read more »
Trata de usar la versión 3.2.0 con el JDK 11 en Source y en el compilador
Hola Antony como estás mira te comento de manera rápida. Tu librería de PanamaHitek me va de lujo la uso para arduino, pics, Avr y en lenguajes distintos como c y asm.. De hecho no tengo problemas con las interfaces que hago y la comunicación serie pero al parecer hay une error en el metodo «arduinoRXTX();» o eso parece.. te explico mi problema. En proteus tengo un microcontrolador y tengo el «compim» que es para hacer comunicacion serie y está en el COM1.. ¿Todo bién verdad?.. perfecto… ahora abro mi interfaz en java y tengo la opción de conectarme al… Read more »
Hola. Gracias por los comentarios.
Creo que lo que tienes que hacer es crear dos instancias separadas. Por ejemplo:
PanamaHitek_Arduino ino1 = new PanamaHitek_Arduino();
PanamaHitek_Arduino ino2 = new PanamaHitek_Arduino();
Has que cada objeto maneje una conexión y así no deberías tener problemas con las excepciones
Hola, necesito tomar la temperatura con un lm35 e imprimirla en la interfaz de netbeans, pero no sé como enviar ese dato y también en netbeans ingresar el angulo que quiero que tenga el servo conectado al arduino. no importa que angulo ingrese, siempre se va al mismo
Mira los archivos de ejemplo
Hola me aparece el siguiente error cuando intento correr el programa de transmitir, tengo instalada la version 3.2.0 (la ultima), tengo netbeans 12.0 y el JDK 11, y en donde pongo la linea «ino.sendData(«1″);» me aparece un mensaje de advertencia «cannot access SerialPortException», class file for jssc.SerialPortException not found igualmente la del segundo boton no me la marca pero si comento todo ese bloque el error se transmite al que no marcaba nada puedes apoyarme por lo que puede ocasionarlo ya que he movido y revisado de que todo este en orden y no veo otro error visible, gracias.
Creo que eso posiblemente se debe a que estás usando el programa en Java a la vez que tienes el Monitor Serie abierto. No puedes tener dos programas accediendo al puerto serie al mismo tiempo
Pero el software del arduino esta cerrado y mi me deja correr la aplicación. Ahora hice pruebas con el arduino conectado y desconectado, el resultado es el mismo.
Te recomiendo que hagas una prueba de funcionamiento usando los códigos de ejemplo que tengo en el repositorio.
Usa este código en Arduino: https://github.com/PanamaHitek/PanamaHitek_Arduino/blob/master/src/test/java/examples/arduino_sketches/tx_example.ino
Y este en Java: https://github.com/PanamaHitek/PanamaHitek_Arduino/blob/master/src/test/java/examples/arduino/txExample.java
Eso debería permitirte encender un LED en Arduino desde Java. Si no te funciona, me avisas
Nuevamente no me funciono, pero note al comparar lo que escribi yo con el que esta en gitHub que me falta una linea pero al escribirla me seguia marcando lo mismo la linea en cuestion es la siguiente » import jssc.SerialPortException; » y me arroja el siguiente mensaje package jssc does not exist, esto hizo que se desapareciera los errores en las lineas siguientes pero al usar su ejemplo de github me aparece igualmente ese error.
Borra esa línea y trata de hacer el import nuevamente
Borre la linea pero aun asi no me reconoce ese import si lo escribo y aplico ctrl + space solo me aparecen las opcion java, JDK y javax pero no jssc
Estás usando Maven no? Trata de compilar el proyecto a ver si es que no se han descargado las dependencias
Si, ya quedo solucionado, me descargo unicamente el .jar de la libreria original pero no los demas componentes tuve que descargarlos manualmente para que el jssc pudiera funcionar no se porque paso pero ya lo hice y quedo muchas gracias por tu tiempo y apoyo. exito y sigue adelante con este gran trabajo.
Que bien. Gracias.
no me funciona la libreria 2.8.2 con netbeans 8.0.2, JDK 1.8 y e probado tambien con neatbeans 8.2 JDK 1.8. no encuentro una libreria q me funcione a que se puede deber esto… Me esta dando el error siguiente libreria 2.8.2 con netbeans 8.0.2, JDK 1.8: PanamaHitek_Arduino Library, version 2.8.2 # A fatal error has been detected by the Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000007110b5db, pid=15036, tid=0x0000000000002440 # # JRE version: Java(TM) SE Runtime Environment (8.0_271-b09) (build 1.8.0_271-b09) # Java VM: Java HotSpot(TM) 64-Bit Server VM (25.271-b09 mixed mode windows-amd64 compressed oops) # Problematic frame: # C… Read more »
Intenta con la versión 3.0.4 de la librería y con Java 1.8
Otra cosa que podrías intentar es Java 11 y la librería en su versión 3.2.0
Hola amigo, si quiero hacer el programa pero con Proteus, ahí no se usa ningún puerto? De ser así como haría la conexión?
No he probado la librería con Proteus
Hola que tal, quisera saber como puedo referenciar tus librerias, o tu pagina web o tu java doc en el java doc de mi documento.
Si usas formato IEEE sería:
«Librería PanamaHitek_Arduino, v3.2.0», Panama Hitek, 2021. [Online]. Available: https://panamahitek.com/libreria-panamahitek_arduino/. [Accessed: 05- Feb- 2021].
La version 3.2.0 no tiene JSS y no me deja realizar los respectivos try catch, como puedo solucionarlo?
Podrías compartir un ejemplo de código que te produzca errores?
esta linea de codigo me genera el error (ino es un objeto de la libreria correspondiete PanamaHitek_arduino) ino.sendData(«1»); _______________________________________________________ trate de solucionarlo descragando la version 3.1.0 pero me sale: # # A fatal error has been detected by the Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000007110b5db, pid=19532, tid=1168 # # JRE version: Java(TM) SE Runtime Environment 18.9 (11.0.8+10) (build 11.0.8+10-LTS) # Java VM: Java HotSpot(TM) 64-Bit Server VM 18.9 (11.0.8+10-LTS, mixed mode, tiered, compressed oops, g1 gc, windows-amd64) # Problematic frame: # C [jSSC-2.8_x86_64.dll+0xb5db] # # No core dump will be written. Minidumps are not enabled by default… Read more »
Eso parece un error con tu versión de Java. Si estás usando Netbeans tienes que cambiar la versión del código «Source» y la versión de la compilación. Trata de usar JDK11 o algo si puedes el JDK8
Hola, he probado la última librería tanto para las versiones de java 11 como para la 8 y sigue dando el error # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000007110b5db, pid=7892, tid=0x000000000000152c
#
# JRE version: OpenJDK Runtime Environment (8.0_275-b01) (build 1.8.0_275-b01)
# Java VM: OpenJDK 64-Bit Server VM (25.275-b01 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# C [jSSC-2.8_x86_64.dll+0xb5db]
Alguna solución? He probado tanto en intellij como en netbeans y nada 🙁
Intenta con la versión 3.1.0 si vas a usar el JDK 8. Por lo que veo, estás tratando de usar OpenJDK, lo cual podría ser un problema. Usa el JDK 1.8 oficial
Qué tal, antes que nada muchas gracias por el aporte de esta librería, sin embargo tengo una duda, cuando trato de ejecutar el método para establecer conexión con Arduino (.arduinoRX(PORT, RATE, LISTENER);) me arroja el siguiente error: com.panamahitek.ArduinoException: Nomrbe del puerto – COM5; Nombre del método – arduinoRX(); Tipo de excepción – Puerto no abierto.
Ya me cerciore de el arduino este funcionando en perfectamente y que efectivamente sea el puerto correcto, a qué se deberá?
Estás intentando abrir la aplicación en Java con el Monitor Serie abierto? Si es así, ahí está tu problema. No se puede abrir un puerto serie desde dos aplicaciones al mismo tiempo
Hola muchas gracias, sí en efecto lo utilizé con el monitor serie abiero, creí que era de esa forma porque la exepcion que me aparece con el monitor serie cerrado es la siguiente y no se a que se deberá(estoy usando el jdk 1.8 y netbeans12.1): # # A fatal error has been detected by the Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000007110b5db, pid=11772, tid=0x00000000000035b0 # # JRE version: Java(TM) SE Runtime Environment (8.0_271-b09) (build 1.8.0_271-b09) # Java VM: Java HotSpot(TM) 64-Bit Server VM (25.271-b09 mixed mode windows-amd64 compressed oops) # Problematic frame: # C [jSSC-2.8_x86_64.dll+0xb5db] # #… Read more »
Tienes que usar la última versión de la librería, la 3.2.0, en la que se corrije ese problema
Hola, sí muchas gracias, efectivamente estaba usando el monitor serie, sin embargo sigue saliendo el siguiente error (utilizo netbeans 12.1 y jdk 1.8) # A fatal error has been detected by the Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000007110b5db, pid=15716, tid=0x000000000000379c # # JRE version: Java(TM) SE Runtime Environment (8.0_271-b09) (build 1.8.0_271-b09) # Java VM: Java HotSpot(TM) 64-Bit Server VM (25.271-b09 mixed mode windows-amd64 compressed oops) # Problematic frame: # C [jSSC-2.8_x86_64.dll+0xb5db] # # Failed to write core dump. Minidumps are not enabled by default on client versions of Windows # # An error report file with more… Read more »
Tienes que usar la última versión de la librería, la 3.2.0, en la que se corrije ese problema
hola quiero empezar diciendo que gracias por esta librería me ha servido mucho y me gustaría saber si se puede usar con Bluetooth?
Estoy pensando agregar soporte para ello, pero no he tenido tiempo de hacerlo
Saludos Sensei Antony, con Daniela, hace rato no me comunicaba, pero veo que ya te realizaron la pregunta sobre la falla de la libreria con las nuevas versiones de java y netbean. Según veo lo unico que queda es bajar la versión de java. Gracias por tus grandes aportes a nuestro pueblo latino. Bendiciones
Hola. Gracias por escribir. Justo acabo de lanzar una nueva versión de la librería en la que hay soporte para el JDK11. Te recomiendo que revises el repositorio de Github: https://github.com/PanamaHitek/PanamaHitek_Arduino
Saludos Antony, llevo usando tu librería desde hace años, por cuestiones personales reinicie mi equipo y al querer ejecutar un app que hice hace años con tu libreria, me manda errores, he leido que por la version del jdk posiblemente, y como netbeans ya se actualizo a la version 12, me manda error al momento de ejecutar en netbeans. el error es el siguiente: Error: java.io.FileNotFoundException: config.properties (El sistema no puede encontrar el archivo especificado) # # A fatal error has been detected by the Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000007110b5db, pid=2060, tid=12256 # # JRE version:… Read more »
Hola. Le puedes instalar el JDK 1.8 al Netbeans y seguir trabajando con las versiones anteriores del JDK. No debe darte problemas en el 1.8
instale Netbeans 8.2 con el jdk8u112, y jala en el entorno de netbeans, pero al construir el .jar y ejecutarlo, genera .log con el error detallado el cual es demasiado, te coloco la parte inicial: # # A fatal error has been detected by the Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000007110b5db, pid=1864, tid=8172 # # JRE version: Java(TM) SE Runtime Environment 18.9 (11.0.7+8) (build 11.0.7+8-LTS) # Java VM: Java HotSpot(TM) 64-Bit Server VM 18.9 (11.0.7+8-LTS, mixed mode, tiered, compressed oops, g1 gc, windows-amd64) # Problematic frame: # C [jSSC-2.8_x86_64.dll+0xb5db] # # No core dump will be written.… Read more »
Desintale el jdk 11 y se soluciono, ya se ejecuta el .jar
Gracias por la respuesta.
Hola!, Excelente aporte! Desde ayer estoy intentando compilar un programa para controlar leds RGB desde windows, pero siguiendo los pasos que explicas, el programa abre, pero al conectar la placa arduino ya no se ejecuta y Output de netbeans dice: # # A fatal error has been detected by the Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000007110b5db, pid=3616, tid=1680 # # JRE version: Java(TM) SE Runtime Environment (11.0+28) (build 11+28) # Java VM: Java HotSpot(TM) 64-Bit Server VM (11+28, mixed mode, tiered, compressed oops, g1 gc, windows-amd64) # Problematic frame: # C [jSSC-2.8_x86_64.dll+0xb5db] # # No core dump… Read more »
Creo que tienes que usar el JDK 1.8 para que funcione bien
tengo netbeans 11.2 y jdk 1.8 compilo en este pero me sigue dando error — exec-maven-plugin:1.5.0:exec (default-cli) @ Arduino — java.lang.UnsupportedClassVersionError: com/mycompany/arduino/arduino has been compiled by a more recent version of the Java Runtime (class file version 57.0), this version of the Java Runtime only recognizes class file versions up to 52.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:763) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:468) at java.net.URLClassLoader.access$100(URLClassLoader.java:74) at java.net.URLClassLoader$1.run(URLClassLoader.java:369) at java.net.URLClassLoader$1.run(URLClassLoader.java:363) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:362) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495) Error: A JNI error has occurred, please check your installation and try again Exception in thread «main» [ERROR] Command execution… Read more »
Es un problema con el JDK. Creo que el compilador debes tenerlo seleccionado en la versión 11. Son dos configuraciones que se deben cambiar en las propiedades del proyecto. Creo que una es en source y la otra es en compile
Hola primero que nada que librería tan buena me a sacado de muchos apuros pero tengo un problema y esque nunca avía intentado hacer eso pero cuando quiero enviar un dato de Java a Arduino con ino.sendData(Txtnumero.getText); no lo recibe aunque lo guarde previamente en otra variable lo envía pero Arduino no lo detecta, incluso convertí el valor en entero y lo envie con ino.sendByte(entero); y lo envía pero Arduino lo recibe como «0» . Cuando imprimo el valor en NetBeans antes de enviarlo está correcto pero lo envío y Arduino no lo recibe o lo recibe con valor «0»
Como estás recibiendo la información en Arduino?
Hola, tengo un incoveniente, deseo usar la libreria pero para el programa que deseo realizar no puedo usar maven, cual seria la alternativa a usar o como se implementaria la libreria si usara Java Application, gracias de antemano.
Para eso deberías bajar la librería PanamaHitek_Arduino-3.0.0.jar e incluirla en tu proyecto Java Application
Buenos días ingeniero, por este medio quiero expresarle mi agradecimiento por tan buenos tutoriales, pero tengo una duda, mi duda es ¿Como puedo utilizar la librería 3.0.4 sin utilizar mavens, o sea como puedo llamarla y usarlo solo desde un java aplicación?
Hola como puedo almacenar la lista que me envía getSerialPorts(), o cual es la manera correcta de usar este.
Es una lista de Strings. Puedes acceder a cada elemento usando get(0), get(1)… dependiendo de cuantos elementos tenga la lista
Hola tengo un problema, cuando ejecuto mi programa desde netbeans funciona a la perfección pero cuando lo construyo con las librerías (unido todo) (uso su codigo de su pagina para hacerlo )se abre y se cierra creando un log como el siguiente: # # A fatal error has been detected by the Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000007110b5db, pid=13088, tid=12768 # # JRE version: Java(TM) SE Runtime Environment (13.0.1+9) (build 13.0.1+9) # Java VM: Java HotSpot(TM) 64-Bit Server VM (13.0.1+9, mixed mode, sharing, tiered, compressed oops, g1 gc, windows-amd64) # Problematic frame: # C [jSSC-2.8_x86_64.dll+0xb5db] # #… Read more »
Eso parece ser una mala configuración de tu proyecto en el IDE. Trata de usar Java 8 para compilar tu proyecto. Si usas versiones superiores de Java te va a dar problemas
Gracias, intentare eso.
Hola, tengo un problema con la librería al recibir datos del arduino, porque solicito cuantos puertos estan en uso y me los da, le pido el nombre de los puertos y me los da, pero cuando le pido de lea los datos que me manda arduino me vota el error: # # A fatal error has been detected by the Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000006ec4b5bb, pid=10416, tid=11244 # # JRE version: OpenJDK Runtime Environment (13.0.1+9) (build 13.0.1+9) # Java VM: OpenJDK 64-Bit Server VM (13.0.1+9, mixed mode, sharing, tiered, compressed oops, g1 gc, windows-amd64) # Problematic… Read more »
Ese error parece estar relacionado al JDK. Tienes que usar el JDK 1.8. Si estás en Netbeans tienes que hacer clic derecho en el proyecto y revisar donde dice Source y Compile. En ambas pestañas tienes que seleccionar el JDK 1.8
Ya le di click derecho a mi proyecto y me sale:
New
Build
Clean and Build
etc. y en ningun apartado me aparese el apartado source y compile, podria ser un poco mas especifico por favor.
Nota: Disculpe mi ignorancia pero soy casi nuevo en el ide de netbeans
ya le di click derecho y me sale:
NEW
BUILD
CLEAN AND BUILD
CLEAN
Etc.
Pero no encuentro Source y compile. podria ser un poco mas especifico uso netbeans 11.1 pd: Disulpe mi ignorancia pero soy semi nuevo en este ide.
En las propiedades del proyecto…
Hola Amigo sabes veo que eres alguien que sabe mucho sobre el tema. Yo recién empiezo a ver el lenguaje en java y me encargaron un proyecto de Arduino utilizando Java con sensores y yo elegí el de pulso cardíaco. Creí que era fácil pero no encuentro información sobre ese sensor como lograr la comunicación de arduino a java. Podrías ayudarme donde buscar o si hay una guía sobre eso o un código de ejemplo de java. Gracias de antemano
Es este blog se ha publicado la información suficiente para que tu puedas hacer esto por tu propia cuenta
[…] He utilizado la “Librería PanamaHitek” para realizar la comunicación con Arduino. En este enlace les dejo el acceso a la página donde explican los pasos que hay que realizar par instalarlo sin problemas. Yo he seguido los pasos y no he tenido problemas (pincha aquí). […]
Hola, me podrias decir como agregar esta libreria a mi programa en java? muchas gracias
Usa Maven. Mira este video: https://www.youtube.com/watch?v=atzUeKeNQ-A a partir del minuto 3
Hola,
No sé si se publicó mi comentario anterior. Pero estoy usando la libreria para implementar un detector de color en Arduino y enviar esa información a Java para que haga una acción concreta en cada caso de color.
El caso es que envío un String «The color is Blue» cuando detecta un color, pero cuando en Java intento hacer el condicional if (x=»The color is Blue») no consigo que el programa ejecute este if. Como si no estuviera.
Alguna ayuda?
Muchas gracias!
if (x ==aqui el dato del sensor){
system.out.println(«el color es azul»);
{
Buenas tardes,
Primero de todo muy buen trabajo! Tengo una duda: Ahora mismo estoy programando un detector de color en Arduino pero quiero tratar la información en Java, por lo que estoy usando su libreria.
En Arduino estoy enviando de que color se trata con el mensaje «The color is Blue» pero cuando en Java pongo un if (x==»The color is Blue») no sucede nada. Simplemente no entra en este condicional. No se si se trata de que lo que se envia no es un String…
Sabrias detectar el problema y proponerme una solución?
Muchas gracias!
En Java no se utiliza el operador «==» para comparar cadenas de caracteres, sino el método equals. Asumiendo que «x» es un String, tu condición debería ser x.equals(«The color is Blue»).
Gracias por la aclaración pero el problema persiste.
Tengo esto:
String color = String.valueOf(ino.receiveData());
if (color.equals(«The color is Blue»)){
…
}
Por lo visto el valor de color es null.
No lo estás haciendo bien. Te recomiendo el video que he presentado en este post: https://panamahitek.com/envio-de-multiples-datos-simultaneos-de-arduino-a-java/
Ahí podrás ver, paso por paso, como es que se envían los mensajes de Arduino a Java correctamente
Hola Antony ,Gracias por compartir esta librería . Quería hacerte una consulta , estoy haciendo una aplicación en java para graficar en tiempo real la entrada analógica de Arduino. Y el codigo que utilice funciona bien ,salvo para altas frecuencias de muestreo. Cuando el envio de datos desde arduino a java supera los 10 datos por segundo me sucede que printMessage() me envia de manera aleatoria dos lecturas seguidas y una sin nada . Ejemplo : en vez de mostrarme 1000 y en la siguiente 997 me muestra 1000997 y en la siguiente nada . Estoy buscando la forma de… Read more »
Hola. Esta librería normalmente no te brinda buenos resultados para altas frecuencias de muestreo. Podrías intentar no utilizar el printMessage y en vez de eso usar receiveData() que te entregará los bytes tal como Arduino los envía. De esta forma podrías intentar procesar los datos y talvez encontrar un algoritmo que lo haga más rápido que printMessage. Yo en lo personal no recomiendo usar altas frecuencias de muestreo con esta librería.
Hola Muchas gracias por tu aportación
He hecho una aplicación en Java muy básica, es iniciar y detener el funcionamiento de un semáforo. solo que el botón iniciar si lo hace, pero el botón detener no, me puedes ayudar?
este es mi código:
https://drive.google.com/file/d/17YLhSGEqXj_dXikdwRpm3lu7RjHa3pxN/view?usp=sharing
Intenta utilizar tu variable input como String en lugar de int para asignarle el dato de entrada usa serial.readstring();
https://www.arduino.cc/en/Serial/ReadString
No acepta un valor diferente de ‘1’…
hice una aplicación en Java para iniciar y detener el semáforo, el botón iniciar si lo hace pero el botón detener no… me puedes ayudar?
código:
https://drive.google.com/file/d/17YLhSGEqXj_dXikdwRpm3lu7RjHa3pxN/view?usp=sharing
Disculpa cuando quiero recibir un dato en java con printMessage() y lo almaceno en una variable me aparece que no hay datos disponibles, solo los puedo usar con un System…
Eso se debe talvez a que no estás usando el método isMessageAvailable() o a que no estás enviando los datos desde el Arduino usando Serial.println().
Hola!!
Estoy he desarrollado una interfaz q muestra los piertos COM disponibles en el PC, permite seleccionar uno de ellos e iniciar la conexion con Arduino. Mi pregunta es ¿Como puedo chequear q en el COM seleccionado existe un Arduino conectado?
hola una pregunta cuando uso el metodo killconection() siempre me sale un aviso que es persistente y no me deja seguir usando la aplicacion entonces mi pregunta es como puedo solucionar ese inconveniente que cuando cierre la conexion me permita seguir usando la aplicacion
Compártenos tu código a través del foro
La configuracion es la misma si deseo conectar la pc con un modulo bluetooth HC-05?
Hola tengo un problema estoy utilizando el método RXTX y envío datos perfectamente sin embargo cuando recibo datos no me los agarra bien aveces desde arduino estoy enviando serial. Println (“R»+minutos)
serial. Println (“R»+segundos )
serial. Println (“R»+décimas)
serial. Println (“R»+centensimas)
serial. Println (“R»+milésimas)
Sin embargo aveces recibo lo siguiente
R0R
1
R7
R5
R3
Y yo quisiera recibir
R0
R1
R7
R5
R3
En Arduino no puedes concatenar cadenas de caracteres dentro de el Serial.println. Al menos yo nunca he tenido éxito haciéndolo.
Te recomiendo que te crees un String y concatenes los datos Luego imprimes. Por ejemplo:
String msg = «R»;
msg += mminutos;
Serial.println(msg);
Así debería funcionar.
Es una fantástica aportación, mil gracias
Buenas noches, quiero replicar la aplicación en un computador de mesa y no me sirve cuando le doy en el botón encender y tengo el mismo código en mi portátil y todo funciona, que podría ser, sera que falta alguna configuración? , agradezco tu ayuda mil gracias.
El puerto COM. Posiblemente no sea el mismo para las dos computadoras.
Muchas gracias amigo, te deseo muchas bendiciones
GRAICASSSSSSS
Disculpe,una pregunta…si en el caso de que en el arduino presione un pulsador y quiero que en el programa realice algún evento,que debo utilizar?
Disculpa amigo me podrías indicar como se da el funcionamiento de la clase MultiMessage, no entiendo como puedo usarlo dentro del código si por ejemplo tengo 5 sensores que detectan movimiento y que envían datos desde arduino a java
No me gusta que al Crear el contructor del Objeto Arduino salga con un sout la informacion esa impresa voy a descomplilar la libreria
La librería es libre, no es necesario descompilarla. Y la impresión es simplemente la información de quien creó la librería. Usualmente se respeta lo que el autor del código ha puesto ahí. Igual el código es libre
Usualmente no me gusta que salga ese contenido
@Antony_García_González
Si tienen algún comentario no duden en hacérmelo llegar.
Bien
¡Muchas gracias amigo! Me ayudo mucho para un proyecto de la universidad, ¡eres un maestro!
Hola, tengo una pregunta, ¿hay alguna manera de que al iniciar la aplicación de java, y se inicie la conexión, si desconecto el arduino del PC, este indique la perdida de conexión, y volver a recuperar la conexión si se conecta de nuevo? es algo difícil, ya que los métodos de conexión solo se ejecutan al inicio del programa de java, he intentado con hilos pero no reconoce los métodos ya que el RXTX lo reconoce como RX. La librería me ha funcionado muy bien es muy sencillo usarla, gracias por compartirlo y la realización de este proyecto sobre arduino… Read more »
Bueno quizás podríamos pensar en agregar este tipo de nuevas funcionalidades a la librería. Trabajaremos en eso
Me gustaria
Alguna otra librería que tenga las mismas funcionalidades pero que permita detectar si el arduino se desconecta y que recupere la conexión si se conecta de nuevo?
No lo se. No es tan sencillo de hacer. Si no lo he hecho hasta ahora no es porque no quiero