Pages: [1]   Go Down
Author Topic: Consulta dato float Tx RF  (Read 759 times)
0 Members and 1 Guest are viewing this topic.
Chile
Offline Offline
Newbie
*
Karma: 0
Posts: 11
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

 Buenas tardes

Estoy desarrollando un proyecto de transmisión de datos. Necesito enviar un dato float por medio de un par de modulos RF 433 MHz(en una primera instancia solo como prueba, pues debo cambiar mis modulos por unos q me permitan alcanzar mayor distancia).
Buscando información encontré que puedo utilizar la libreria "VirtualWire".
Sin embargo yo necesito recolectar un dato float, el cual debe ser enviado remotamente, pero tengo algunas dudas:

1. Es necesario convertir el dato de float a string para su envío??
2. Es confiable convertir un dato float (con dos decimales) a string utilizando la función "dtostrf" y enviarlo sin perdida.??

Parte del codigo de adquisición de dato (para que se vea la magnitud de la variable float) es el sgte:

void setup()
{
  Serial.begin(9600);
  
  pinMode(clkPinA, INPUT);  
  pinMode(dirPinA, INPUT);  
  attachInterrupt(0, encoderIntA, RISING);
}

void loop()

{
 if (changeFlag)
 {
    changeFlag = false;
    distmm = ((encoderACount * 120) / 2405);

..........


Gracias.

« Last Edit: March 21, 2013, 02:35:02 pm by alumbrin » Logged

Palencia, Spain
Offline Offline
God Member
*****
Karma: 25
Posts: 542
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Evidentemente, puedes convertirlo a string con un número determinado de decimales y reconvertirlo a float en el receptor, pero probablemente perderás precisión en las dos operaciones. Muy recientemente hemos estado discutiendo el tema de los datos en punto flotante en este hilo.
Un dato float ocupa 4 bytes con toda su precisión, por lo que la mejor forma de enviarlo a mi parecer sería enviar esos cuatro bytes y refundirlos de nuevo en el receptor, con lo que tendrás una copia exacta del float original. Creo que la librería de la que hablas tiene una función que envía un número determinado de bytes de un buffer dado; algo así como send(byte * buffer, int longitud). Podrías declarar un puntero a byte que apunte al comienzo del float que quieres enviar, y enviar 4 bytes de esa posición de memoria.
Code:
    float pi=3.1415926;
    byte *refpi=(byte*)π
    send (refpi,4);
En la parte receptora, haríamos lo inverso, es decir escribir los cuatro bytes recibidos en la posición de memoria donde está la variable float.
Code:
    float received=0.0;
    byte *refreceived=(byte*)&received;
    receive(refreceived,4);
    Serial.println(received);
Si sólo vas a enviar datos float, creo que este sistema puede ser sencillo de implementar. Si van diferentes tipos de datos, tienes que buscar la forma de sincronizar el comienzo del dato.
Logged

Pages: [1]   Go Up
Jump to: