problema con transmision de datos xbee pro s2

hola amigos,
tengo un problema con la transmision de datos mediante las tramas xbee,
estoy realizando la medicion de un sensor de temperatura y deseo que este transmita mediante xbee pro s2 configurado como API, (estoy recibiendo en un gateway de libelium)pero en la trama no logro establecer que me envie el valor de la temperatura que es un tipo float, (me llega la trama pero sin el valor que deseo),no se si alguien me puede guiar de como estructurar bien el programa para que me realice dicha accion, debido a que tengo problemas con los tipos de datos que se maneja en arduino.
el programa es el siguiente:
#include <OneWire.h>
#include <XBee.h>

OneWire ds(53);

XBee xbee = XBee();

uint8_t payload[4];

// SH + SL Address of receiving XBee
XBeeAddress64 addr64 = XBeeAddress64(0x0013a200, 0x409e2ef3);

ZBTxRequest zbTx = ZBTxRequest(addr64, payload, sizeof(payload));

void setup(void) {
Serial.begin(9600);
xbee.begin(9600);
}

void loop(void) {
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;

if ( !ds.search(addr)) {
Serial.println();
ds.reset_search();
delay(2500);
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44, 1);

delay(1000);

present = ds.reset();
ds.select(addr);
ds.write(0xBE);

for ( i = 0; i < 9; i++) {
data = ds.read();

  • }*

  • int16_t raw = (data[1] << 8) | data[0];*

  • if (type_s) {*

  • raw = raw << 3;*

  • if (data[7] == 0x10) {*

  • raw = (raw & 0xFFF0) + 12 - data[6];*

  • }*

  • } else {*

  • byte cfg = (data[4] & 0x60);*

  • if (cfg == 0x00) raw = raw & ~7; *

  • else if (cfg == 0x20) raw = raw & ~3;*

  • else if (cfg == 0x40) raw = raw & ~1;*

  • }*

  • celsius = (float)raw / 16.0;*

  • Serial.print(celsius); //EN EL SERIAL ME IMPRIME NORMALMENTE LA TEMPERATURA*

  • //REALICE ESTOS PASOS PARA SACAR NUMERO POR NUMERO Y COLOCARLO EN LE PAYLOAD PERO NO LO*

  • //CONSEGUI*

  • int a=0, b=0, c=0, d=0, e=0;*
    _ a=celsius*100;_

  • b=a/10;*

  • c=a%10;*

  • b=b/10;*

  • d=b%10;*

  • b=b/10;*

  • e=b%10;*

  • payload[0]=b;*

  • payload[1]=e;*

  • payload[2]='.';*

  • payload[3]=d; *

  • payload[4]=c;*

  • xbee.send(zbTx);*
    }
    Si alguien me puede guiar por favor y me ayude GRACIAS...

Creo que he tenido un "dejavu" XD. Me suena haber leído varios hilos con preguntas similares, cambiando tan solo el medio de transmisión. Te explico con Serial.write cómo puedes hacer el envío, suponiendo que xbee permita el envío de n bytes a partir de una dirección de memoria, que por lo poco que he visto en tu código creo que sí, y que en xbee sólo tendrías que añadir la dirección de envío como primer parámetro.

float miflotante=3.1416;
Serial.write( (byte *) &miflotante, sizeof( miflotante ) );

Respecto a cómo recibe xbee los datos, lo desconozco, pero el proceso es básicamente el mismo.

Gracias por la respuesta,
el problema me parece que es al momento que recibe me imprime con caracteres ASCII y no con los valores que yo envio, alguna idea para que me imprima el valor propio que envio???

¿Cómo es la rutina de recepción? Es que lo que estás enviando es el float tal y como está almacenado en memoria (4 bytes para float en arduino, creo), no los caracteres que representan el número en decimal. Esos bytes deberían ser almacenados consecutivamente en una dirección de memoria donde se haya declarado un float, que es el que posteriormente mostrarás (no lo que te llega, directamente).
Si lo que quieres es enviarlo convertido en texto, puedes utilizar sprintf para "escribir" el texto en una zona de memoria:
float pi=3.1416;
char buffer[10]; // espacio para imprimir 4 dígitos enteros más 4 decimales, más el punto decimal, más el terminador de cadena \0
sprintf(buffer, "%04.4f", pi); // ahora buffer contiene "0003.1416". Podemos enviar lo que contiene buffer.

gracias Noter por responder,
entiendo todo lo que me dices, el problema es que como se ve el la ultima parte del codigo no deseo imprimirla sino mas bien enviarla por el xbee es por eso que el valor de la temperatura lo separe numero por numero eso lo almacene en diferente variables para poder asignarle en las ubicaciones de la variable "payload" para poder ser enviadas por el xbee, y cuando abro el puerto de quien recibe me envia la trama pero no me llega el valor me sale en blanco los espacios donde deberia estar los valores que envie,

hice unas pruebas enviando caracteres y me recibe satisfactoriamente (envie ej. char a='4' y en el payload le asigne payload[0]=a), no se porque no me envia los valores float o int, porque los char me recibe bien tal como hice el ej. alguna idea de como poder resolver este problema???

Gracias