Muy buenas,
En el trabajo utilizamos habitualmente un dispositivo que registra unos parámetros de transmisión de microondas (no procede entrar en detalles de qué son esos parámetros), y actualmente visualizamos los valores a través de una aplicación de PC proporcionada por el propio fabricante.
Para hacer unas pruebas con unos prototipos, quiero que el arduino lea esos parámetros para intentar automatizar algunas acciones, aprovechando que en el manual de instrucciones viene más o menos detallado el protocolo de comunicación serie.
Me surgen algunas dudas para empezar a abordar la rutina de arduino, ya que no he lidiado antes con protocolos de comunicación, y quería ver si alguien me podía echar un cable
La comunicación es serie a través de RS232 y lo llamma SCI (Serial Command Interface).
El Arduino deberá enviar una solicitud al dispositivo, que es un caracter. Se pueden enviar distintas solicitudes, y en función de ésta el dispositivo envía distintos frames de datos en forma de caracteres ASCII.
Cada frame empieza con el carácter ‘$’ seguido de dos caracteres ‘0’. El siguiente carácter corresponde al tipo de frame de datos (hay ter tipos distintos), y a partir de ahí viene la confusión.
Los siguientes bytes contienen la información numérica que interesa (las variables que quiero usar) agrupadas en 4 caracteres cada una.
Si el frame se transmite como cadena de caracteres, me surge la duda de como unir dos caracteres en números. Por ejemplo si leo los caracteres son “ABCD”, para expresarlo como número decimal entiendo que no debo concatenar los números decimales correspondiente a A, B, C y D (65-66-67-68) ya que en ese caso lo máximo que podría representar es 127127127127…(o en la práctica 127999999, lo cual sería más que suficiente en este caso en concreto).
¿Qué función sería la más adecuada para sacar el valor numérico a una cadena de 4 caracteres con Arduino? En el apartado Reference de este sitio web sí que encuentro la función word (x,y) que entiendo que concatena dos bytes consecutivos, pero no encuentro qué función podría usar para concatenar 4 bytes o 2 words en un unsigned long.
¿Existe alguna librería que facilite este tipo de comunicación?
Otra duda que tengo de la comunicación serie es qué ocurre si mientras los dos equipos intentan enviar al mismo tiempo. Es decir, si el Arduino intenta enviar una solicitud mientras el otro dispositivo está enviando datos, ¿se interrumpe la comunicación?
Perdonar por el rollo y gracias de antemano.
saludos