Entiendo que los frames tienen esta estructura general:
Hay varias partes del código que no entiendo, tal vez alguien ha trabajado antes con este mismo codigo y me puede echar una mano.
void loop() {
// make sure everything we need is in the buffer
if (Serial.available() >= 23) {
// look for the start byte
if (Serial.read() == 0x7E) {
//blink debug LED to indicate when data is received digitalWrite(debugLED, HIGH);
delay(10);
digitalWrite(debugLED, LOW);
// read the variables that we're not using out of the buffer // (includes two more for the digital pin report)
for (int i = 0; i<20; i++) {
byte discard = Serial.read(); }
int analogHigh = Serial.read();
int analogLow = Serial.read();
analogValue = analogLow + (analogHigh * 256);
} }
*Sé que el valor 23, en el primer 'if' corresponde al largo total del frame enviado por un Xbee remoto y recibido por el Arduino(en este caso específico), pero ¿cómo se definio ese valor? y el valor del '20' puesto en último for??
En realidad ese código es válido para un tipo de paquete concreto (el que muestrea las entradas/salidas) y, probablemente para una configuración concreta de puertos habilitados/deshabilitados. Es decir, si tienes un Xbee con la misma mascara de IO configurada que la persona que escribió el ejemplo y le mandas un IO sampling te servirá, si no no te servirá.
Que tal zigbe31416, entiendo que este un caso específico, y que el tamaño del packet variará dependiendo de la cantidad de entradas-salidas habilitadas, de la información de status que me envíe el xbee....
Lo pregunto de otra forma, siendo la estructura de un frame cualquiera:
Entonces quiero comprobar que en buffer hay un frame completo, que para trabajar de este modo yo debería saber el total de bytes que este contendrá,
entonces comienzo mi código con:
void loop() {
// make sure everything we need is in the buffer
if (Serial.available() >= 23) {
// look for the start byte
if (Serial.read() == 0x7E) {
Ese 23 me define hasta donde quiero leer los datos del data frame recibido, cierto?
Mi pregunta es; que es lo específicamente representa el 23, cantidad de bits? de caracteres?....Porque si son bits tendria que
Resultó ser que el '23' representa el numero de bytes que contiene el frame (en este caso especifico):
(start byte) (length) (data frame ) (checksum)
1 byte 2 bytes 20 bytes 1 byte
en donde el data frame esta compuesto por 20 bytes que contienen información del tipo de frame, address, AT commands etc...