Hola llevo un tiempo buscando en google como trabajar en hexadecimal con arduino, y no me aclaro como se puede trabajar con otros formatos que no sean decimal. No se como almacenar un valor hexadecimal en una variable ni como la tengo que definir, y con los valores binarios me pasa lo mismo.
Mi intención es la siguiente:
Digamos que yo a traves del serial, le paso a arduino el valor hexadecimal de: 0xA5100107 Pero este valor se me almacena en una variable String.
El valor string lo tengo que convertir a Hexadecimal par posteriormente pasarlo a Binario.
Al pasar a Binario obtendría el siguiente número 1010 0101 0001 0000 000 0001 0000 0111. Este número lo tengo que pasar a string para dividirlo en 3 string diferentes:
1010 0101 = ID Dispositivo
0001 0000 000 0001 = Comando
0000 0111 = checksum
Estos últimos valores los tendría que pasar de binario a decimal según proceda...
Por eso tal y como he mencionado anteriormente necesito saber como almacenar un valor hexadecimal en una variable y como definir esta variable, y con los valores binarios me pasa lo mismo, como almacenarlos, como definir las variables y como pasarlas a decimal.
He visto que Serial.println(intValue,HEX); Serial.println(intValue,BIN); muestran en pantalla un texto en hexadecimal o en binario, pero no creo que sea la solución por que no se como capturar ese texto a demas no quiero imprimir nada en el puerto serial para evitar colisiones de datos.
Muchas gracias.
Eso luce como MODBUS o cuanto menos un protocolo estilo RS485/422.
Bien para empezar ya sabes que los dos primeros caracteres son tu disopositivo de modo que jamás lo pasaría a hexa para luego separarlo y volverlo a string nuevamente.
recibes 0xA5100107 poque no lo tratas como un unsigned long para comenzar y no como string?
Luego separas
dispositivo :A5
trama : 1001
CRC : 07
Supongamos que como siempre ocurre algo no has contado, entonces no creo que cambie esto.
los dos primeros bytes siempre seran dispositivo que envia la trama
Los ultimos dos siempre serán el CRC y lo intermedio la trama
Estoy en lo correcto?
Aunque aun no te respondí estamos a un paso.
Hola efectivamente me gustaría controlar una serie de reles y sensores de temperatura y humedad desde el RS485 pero de momento primero mientras programo el dataloger por llamarle asi, lo voy hacer mediante el serial. En el futuro me gustaría controlar a traves del modbus hasta 254 datalogers por cada linea.
Estoy actualizando el Terrario Control que diseñe el 2013 que por falta de tiempo lo tenia un poco abandonado:
Entonces por lo que me dices creo entender que es mejor utilizar un número unsigned long que posteriormente lo puedo pasar a binario y procesar los datos?.
Si mando un Unsigned Long son 10 caracteres si lo mando en Hexadecimal 8, diferencia solo son 2 bites más, pero el unsigned long se manipula mejor que el hexadecimal.
Sigo sin tener muy claro como se guardan y definen las variables HEX o BIN.
Un saludo y muchas gracias por tu ayuda.
Respecto al CRC había pensado en utilizar los últimos 8 bit del para guardar en ellos en binario el resultado de la suma de los 24 anteriores.
Pero para que quieres hacer eso si esta todo hecho en el protocolo Modbus. Usa las librerías modbus y te dedicas a hacer funcionar tu Terrario.
Librerías posibles de usar busca en Google : Arduino Modbus Library
Pero para que quieres hacer eso si esta todo hecho en el protocolo Modbus. Usa las librerías modbus y te dedicas a hacer funcionar tu Terrario.
Librerías posibles de usar busca en Google : Arduino Modbus Library
No soy quien para cambiar tu forma de pensar pero has considerado usar cosas como estas:
nRF24L01 transceptor muy barato que te permite hasta 6000 nodos y de corto alcance ideal para domótica.
o usar este otro
ESP8266 un modulo WIFI que tiene versiones que funcionan como un arduino con varias entradas/salidas y AD o bien lo usas como extensión de Arduino logrando una interfaz WIFI por pocos Euros.
Solo para ampliar tu punto de vista ya que estas en un punto de decisiones. Esto no altera tu control del terrario, solo hablo de como enviarle/recibir información
Hola, gracias por tu respuesta, en su día me explicaron que el modbus es como el puerto serie pero con mayor alcance y que se pueden poner hasta 254 dispositivos pero que el protocolo de comunicación lo tenia que programar yo, no sabia que hubiese librerías ya especificas para este fin.
He estado mirando las dos alternativas que mencionas y el ESP8266 NodeMCU me ha gustado mucho. Lo tengo que mirar un poco mas.
El que sea a traves de wifi me preocupa, puesto que cuanto más sencillo sea de instalar mejor, puesto que tiene que estar pensado para gente con pocos conocimientos de electronica o informatica. Pero bueno, siempre se puede hacer un programa en el PC que te configure el modulo con las contraseñas del wifi y a funcionar...
Estos días investigare un poco.
Gracias.