Problemas con envio de datos desde un router API a un coodinador API.

81 views
Skip to first unread message

rivasro...@gmail.com

unread,
May 23, 2018, 11:58:04 AM5/23/18
to xbee-api
Buenas!, estoy tratando de mandar datos de sensores de temperatura desde 4 nodos utilizando la targeta arduino UNO  y usando zigbee para crear la red malla (mesh). El tema es que me manda datos erroneos y no estables. Creo que el problema está en la creacion de la trama, es decir en donde defino payload, no me queda bien claro como dividir los datos en 8 bytes por posicion en el vector, todo esto utilizando la libreria de XBee para arduino. Cuando mando un caracter especifico no tengo problemas, solo a la hora de enviar datos de sensores

Fernando Sebastián Tamis

unread,
Mar 20, 2020, 12:37:18 PM3/20/20
to xbee-api
Hola pudiste resolver tu problema ?

Jorge daniel guteirrez felix

unread,
Oct 13, 2020, 12:30:45 PM10/13/20
to xbee-api
/*Testing union*/
typedef union{
    float number;
    uint8_t bytes[4];
}FLOATUNION_t;

typedef union{
    uint16_t number;
    uint8_t bytes[2];
}UINT16_t;

typedef union{
    int16_t number;
    uint8_t bytes[2];
}INT16_t;
typedef union{
    uint32_t number;
    uint8_t bytes[4];
}UINT32_t;


void communicationStatus(){
    UINT32_t Ulongitud, Ulatitud;
    UINT16_t Uyear; 

    MeassureVolts();
    GetGps();
    
    if ((gps.location.lng() !=0) && (gps.location.lat() !=0)){
        timer.disable(timerGps);
        negResult =((gps.location.lng())*(-1));
        millionResult[0] = ((negResult)*(10000000));
        millionResult[1] = ((gps.location.lat())*(100000000));


        Ulongitud.number = millionResult[0];
        Ulatitud.number = millionResult[1];

        buf_strGps[0] = Ulongitud.bytes[3];
        buf_strGps[1] = Ulongitud.bytes[2];
        buf_strGps[2] = Ulongitud.bytes[1];
        buf_strGps[3] = Ulongitud.bytes[0];
        buf_strGps[4] = Ulatitud.bytes[3];
        buf_strGps[5] = Ulatitud.bytes[2];
        buf_strGps[6] = Ulatitud.bytes[1];
        buf_strGps[7] = Ulatitud.bytes[0];
        Serial.println("GPS DATA:");
        Serial.print("buf_strGps[0] " );Serial.print(buf_strGps[0],HEX);Serial.print("buf_strGps[1] " );Serial.print(buf_strGps[1],HEX);Serial.print("buf_strGps[2] " );Serial.print(buf_strGps[2],HEX);Serial.print("buf_strGps[3] " );Serial.print(buf_strGps[3],HEX);Serial.print("buf_strGps[4] " );Serial.print(buf_strGps[4],HEX);Serial.print("buf_strGps[5] " );Serial.print(buf_strGps[5],HEX);Serial.print("buf_strGps[6] " );Serial.print(buf_strGps[6],HEX);Serial.print("buf_strGps[7] " );Serial.println(buf_strGps[7],HEX);
    }

en mi caso hago unions, para partilos en bytes yaque un byte tiene un maximo de 256 enteros, si fuera por ejemplo una temperatura de 25.60 lo multiplicas x 100 lo cual seria 2560 y lo partes en dos bytes el primero 25 el segundo 60 en tu receptor lo concatenas y lo dividies entre 100
Reply all
Reply to author
Forward
0 new messages