Go Down

Topic: Transfert variable de type float avec VirtualWire ? (Read 414 times) previous topic - next topic

Michel_B

Bonjour,

J'essaye d'envoyer une valeur de type float mais bien évidement cela ne marche pas.
Comment faire une convertion ou autre ?

Voici le code de base :

Code: [Select]
#include <VirtualWire.h>
float temp=23.2;
void setup()
{
    Serial.begin(9600);   // Debugging only
    Serial.println("setup");

    // Initialise the IO and ISR
    vw_set_ptt_inverted(true); // Required for DR3100
    vw_setup(2000); // Bits per sec
}

void loop()
{
    const char *msg = temp;
    vw_send((uint8_t *)msg, strlen(msg));
    vw_wait_tx(); // Wait until the whole message is gone
       delay(200);
}


Merci

cutprod

Bonjour, pour convertir ta variable float en string c' est possible mais y a mieux!
Envoi directement soit un int (si tu as toujours, deux unités après ta virgule tu multiplie par 100 avant l'envoi et tu divise par 100 a la réception) regarde ce topic =
http://arduino.cc/forum/index.php/topic,92696.0.html
Mais tu peux faire un array de type float et a mon avis ça roule encore mieux 8)

skywodd

Bonjour,


J'essaye d'envoyer une valeur de type float mais bien évidement cela ne marche pas.
Comment faire une convertion ou autre ?

Le cast d'adresse en pointeur est ton amis ;)

Code: [Select]
#include <VirtualWire.h>
float temp = 23.2;

void setup()
{
    vw_set_ptt_inverted(true);
    vw_setup(2000);
}

void loop()
{
    vw_send((uint8_t *)&temp, sizeof(float));
    vw_wait_tx();
    delay(200);
}

(Le type float étant un type émulé en software par avr-gcc, je suis pas à 100% sur que le cast en uint8_t* soit vraiment effectif, à tester ;))
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Michel_B

Entre temps j'ai fait ceci en regardant le topic de cutprod :
Je regarderais après l'idée de Skywodd.

++

TX
Code: [Select]
#include <VirtualWire.h>

int report[2];
float temp=22.35;
int tmp1;


void setup()
{
   Serial.begin(9600);
   Serial.println("setup");
 
   vw_setup(2000);
}

void loop()
{
   tmp1 = (temp * 100);
   report[0] = tmp1;
 
   vw_send((uint8_t *)report, sizeof(report));
   vw_wait_tx();
   
   delay(1000);
}


RX
Code: [Select]
#include <VirtualWire.h>
float temperature;

void setup()
{
   Serial.begin(9600);
    Serial.println("setup");

   vw_setup(2000);
    vw_rx_start();      
}

void loop()
{
   int buf[2];
   uint8_t buflen = sizeof(buf);

   if (vw_get_message((uint8_t *)buf, &buflen))
   {
     Serial.print("Got: ");
     Serial.println();
     temperature=((buf[0])*0.01);
     Serial.print(temperature);
     Serial.println();

   }
}




Go Up