Transmitir float por Xbee

Buenos días,

Estoy metido en un proyecto en el que trabajo con dos arduinos Duemilanove Atmega328 y dos módulos Xbee. La idea es utilizar uno de los arduinos como estación meteorológica (con sensores de temperatura, humedad, …) y el otro como receptor de los datos y para mostrarlos por pantalla LCD o por el PC. La qüestión es que cuando recibo los datos del sensor de temperatura (un float, por ejemplo 23.25) no soy capaz de enviarlo por Xbee vía serial al otro arduino. He conseguido enviar sólo un bit haciendo pruebas pero enviar un float se me escapa. Utilizo el programa X-CTU para configurar los dos módulos Xbee para los arduinos y en principio creo que eso lo hago correctamente. Os dejo los códigos que tengo del arduino emisor y del arduino receptor (hasta ahora son muy sencilos). Tengo entendido que un float hay que descomponerlo, enviarlo y volver a componerlo al otro lado pero he probado varios métodos que he encontrado por aquí y ninguno me ha funcionado. A ver si alguien me puede orientar y acabo de comprender cómo he de hacerlo. Gracias de antemano.

ARDUINO EMISOR DE DATOS

#include <Math.h>
int tempSensor = 1;

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

void loop()
{
float tempValor;
tempValor = ( 5.00 * analogRead(tempSensor) * 10.00) / 1024.00; \ Conversión a grados centígrados
Serial.print(tempValor);
delay(5000);
}

ARDUINO RECEPTOR DE DATOS

float temp;

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

void loop()
{
while (Serial.available() > 0)
{

temp = Serial.read();
Serial.print(temp);
delay (5000);
}
}

Hi,

my approach is to convert the data I want to send to a string, and send it.

uint8_t payload[75];
  XBeeAddress64 addr64 = XBeeAddress64(0x00000000, 0x00000000);
  ZBTxRequest zbTx = ZBTxRequest(addr64, payload, sizeof(payload));
  ZBTxStatusResponse txStatus = ZBTxStatusResponse();
  for(int j=0; j<75; j++){
    payload[j]=0x00;
  }

  int string_long=SensorId.length();
  for(int i=0; i<string_long; i++){
    payload[i]=SensorId[i];
  }
  
  XBee xbee = XBee();
  xbee.setSerial(Serial);
  xbee.send(zbTx);
  if (xbee.readPacket(500)) {         
    if (xbee.getResponse().getApiId() == ZB_TX_STATUS_RESPONSE) {
        xbee.getResponse().getZBTxStatusResponse(txStatus);
      if (txStatus.getDeliveryStatus() == SUCCESS) {
        return 1;
      } else {
        return -1;
      }
    }
  } else if (xbee.getResponse().isError()) {
    return -1;
  } else {
    return -1;
  }

If you want this post moved to the correct language forum, that can happen. If not, let’s stick to English, here.

  while (Serial.available() > 0)
  {
    temp = Serial.read();

You are sending a string. You are reading ONE character at a time from that string. You need to collect the characters into an array, NULL terminate it at the appropriate time, and convert that array to a float when you know that you have received the complete string.

That, of course, means that you need to change the sender, too, to delimit the string being sent.

http://arduino.cc/forum/index.php/topic,71446.0.html

PaulS: If you want this post moved to the correct language forum, that can happen. If not, let's stick to English, here.

Hi Paul, I agree with what you say here, however, you do realize you can use Google Chrome, and it will translate forum msgs for you. Yes? Right click on the message. [BTW, the best aspect of Chrome is, you can print webpages out as PDF files].