Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Comunicación serie con arduino y java
#1
Estoy evaluando qué posibilidades tengo. La última vez que toqué algo de comunicación entre arduinos lo hice a través de la librería RF24 para intercambiar información (estructuras de datos) entre dos arduinos mediante unos nfr24l01+.

Ahora tengo una Aplicación Java (Cliente) y un Arduino (En realidad es una OpenCM de Robotis). Necesito una comunicación bidireccional y había pensado en la librería RXTX (estoy abierto a otras recomendaciones).

Los datos que voy a intercambiar entre ellos son básicamente órdenes de cambio de estado de unos actuadores, obtener el estado actual de los actuadores y un pulso de vida para monitorizar él estado del sistema.

Desconozco si sería posible intercambiar objetos o estructuras de datos, en último caso creo que podría organizarlo para basar la comunicación en XML o simplemente una cadena con delimitadores.

Un ejemplo de los datos que tendría que intercambiar a modo de cadena delimitada si no encuentro una forma mejor:

JAVA DataPacket (Send)
Código:
ID*/POSITION/SPEED/TEMP/VOLT

*ID=0 -> Hearbeat
0/0=OK
0/-1=KO
Arduino DataPacket (Receive)
Código:
OPCODE/?ID/?GOALPOSITION/?GOALSPEED

OPCODE:
    0-> getAll() //Obtener todos
    1-> getData(idDxl) //Establecer estado
    2-> setData(idDxl) //Obtener estado

? = Opcional
Citar
#2
Pues al final tiro por la vía fácil, cadenas del estilo: [0000/0000/0000/0000/0000/0000].

Fácil, rápido y sencillo. No voy a complicarme, además he hecho alguna prueba previa y parece funcionar muy bien.
Citar
#3
no conozco mucho sobre java, pero yo he programado en MacOSx y arduino por serial, lo que hago es enviar cadena de datos y lo voy guardando en una matriz,

ejemplo mover servo 11 a la posición 90°.

Mac envia 11090/n - /n delimita el cambio de línea

arduino recibe 11090/n - al recibir el cambio de línea le digo que deje de leer los datos.

en un ciclo if lee la cadena que va recibiendo y la va guardando en una matriz que al final me queda m = [1, 1, 0, 9, 0]

con esto ya es todo mas facil para mi.

si quiero saber a que servo estan llamando sería leer m[4]*10 + m[3] (1*10 + 1) = Servo 11 (aqui ya lo tengo en decimal)


lo mismo para los gradosm [2]*100 + m[1]*10 + m[0] (0*100+9*10 + 0) = 90° (aqui ya lo tengo en decimal)

ahora si en vez de usar numeros para los servos quieres usar letras

pruebas en poner alguna letra del abecedario al enviar la cadena por serial a090/n

y leemos en ciclos if o switch la letra
si la letra es a entonces se refiere al servo 11.

recuerda siemopre tener en cuenta que al enviar por serial todo sale en string asiq ue deberas hacer algunas conversiones dependiendo lo que necesites en arduino.

y con respecto al java asumo que solo envias la cadena y listo, eso hago yo, mi bit de parada es el cambio de linea.

esta es una forma facil facil de hacerlo espero te ayude.
Citar


Temas similares...
Tema Autor Respuestas Vistas Último mensaje
  ayuda en coneccion de java con arduino claudiohnavarro 0 423 26-04-2017, 07:02 PM
Último mensaje: claudiohnavarro
  Leer Puerto Serie Progresivamente Triggerr 8 1,704 13-05-2015, 08:48 PM
Último mensaje: MAK
  [AYUDA]Arduino comunicación Serial silth 2 753 02-02-2015, 09:59 PM
Último mensaje: silth
  Comunicacion con nRF905 calpanxo 5 1,457 10-06-2014, 04:06 PM
Último mensaje: hectorri
  Comunicación entre arduinos a larga distancia daniez 12 3,836 25-03-2014, 12:47 AM
Último mensaje: daniez