Recibir datos de arduino en java
Contenidos
Arduino java
Tengo un Arduino que envía datos al programa Java a través de la comunicación serie. Al encender y descansar el Arduino envía datos invisibles al puerto serie que necesitan ser purgados/borrados, etc. He probado la purga en serie desde el arduino y desde el programa Java y ninguno de los dos parece funcionar.
A continuación está mi código Java que cuando se pulsa un botón envía el código al Arduino que enciende o apaga el LED y el Arduino envía de vuelta un reconocimiento de un OFF o ON. Sin embargo, no estoy recibiendo esto. O bien llegan la mitad de los caracteres o ninguno.
Cómo leer y escribir datos desde el puerto serie en java
Arduino es impresionante, pero es bastante inútil como un dispositivo de adquisición de datos (DAQ) si sólo podemos leer los datos en el IDE de Arduino. Recuerdo que en el primer año, trabajé en una placa inalámbrica para mi proyecto de Introducción a la Ingeniería. Por aquel entonces, sin saber nada realmente de programación, decidí que sería genial hacer un mando de juegos inalámbrico como el de la Wii. Así que me puse manos a la obra, utilizando el programa de muestra del fabricante para obtener los datos que necesitaba, escribirlos en un archivo de texto, importarlos en un juego que escribí con Game Maker… omg, los errores, los lags. El TA intentó ayudar pero fue inútil, lol. Luego lo hice de nuevo con el proyecto Space Hopper, si sólo sé cómo leer los datos del Joystick en Java…
En fin, hoy he codificado un poco y esto es lo que he conseguido después de trastear un par de horas. La mayor parte del tiempo la pasé intentando que Arduino enviara los datos correctamente. C++ no es lo mío. Probablemente escriba una clase Java para que sea aún más fácil de usar.
Así que el hardware-sabio, sólo conectar el Arduino a su ordenador a través de un USB. Asegúrate de no ejecutar el código Java y el Monitor Serial Arduino al mismo tiempo. Sólo puedes tener un programa que use el puerto a la vez.
Jserialcomm arduino ejemplo
Ya está solucionado. He puesto un Thread.sleep(4000); después de abrir el puerto en el código java y ahora funciona. El problema era que el arduino se reiniciaba cada vez que se abría el puerto. Cuando estaba enviando los datos, el arduino no estaba preparado para escuchar.
Ya está solucionado. Puse un Thread.sleep(4000) después de abrir el puerto en el código java y ahora funciona. El problema era que el Arduino se reinicia cada vez que se abre el puerto, por lo que estaba enviando los datos cuando el Arduino no estaba listo para escuchar.
Podría utilizar la biblioteca de comunicación Java-Arduino. Se puede encontrar aquí: https://sourceforge.net/projects/javaarduinolibrary/. (asegúrate de descargar ambos jars) Entonces tu código sería algo así:
Java enviar datos a arduino
El problema es que cuando quiero escribir un paquete char a través de la misma conexión HC05 a arduino, a veces funciona. De hecho, cada vez que hago clic en el botón disparando el método de escritura, veo el paquete recibido correctamente, pero cuando hago clic en el botón de nuevo o lo hago rápidamente, a veces sale basura en el lado de arduino.
Tengo retraso en mi bucle principal en el lado de arduino y lo estoy usando para controlar la frecuencia de muestreo de los sensores. He cronometrado el tiempo de cálculo del lado del arduino (excepto el retardo, por supuesto) y tarda unos 52 milisegundos.