variabile float in GET

Buonasera a tutti,
premetto che sono un principiante di arduino.
Ho realizzato un circuito con un sensore di temperatura che mi rileva correttamente la temperatura
A questo ho aggiunto l'ethernet shield per arduino per inviare la temperatura ad un mio server.
Tutto funziona perfettamente.
L'unico problema che non riesco a risolvere è il seguente:
dichiaro la variabile temp come float e leggo la temperatura del sensore

  • temp= sensors.getTempCByIndex(i);
    ora mi connetto al server e passo la temperatura
    client.println("GET /arduino.php?temp="+ temp);
    mi da errore dicendomi: invalid operands of types 'const char [23]' and 'float' to binary 'operator+'
    se faccio
    client.println("GET /arduino.php?temp="+ int(temp));
    funziona, ma io voglio passare al server anche i decimi di grado!!!!!
    Perchè come variabile in get non si possono passare valori float?
    grazie mille a tutti

l'opratore di concatenazione (il +) a quanto pare in supporta gli int ma non i float. Quindi la conversione da float a stringa la devi fare a mano con un comando apposito:

#include<stdlib.h>
dtostrf(FLOAT,WIDTH,PRECSISION,BUFFER);

http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html#ga060c998e77fb5fc0d3168b3ce8771d42

Oppure moltiplichi il float con 10 o 100 a secondo del numero di decimali che hai, aggiungi 0,5 e converti in INT. La pagina che riceve il dato divide di nuovo per 10 o 100.
Ciao Uwe

io lo passavo al web così e funzionava bene

 //--------------------------------Temperature---------------------------------------------------------------   

#include <floatToString.h>


        int campion=10;
        float  tempc1=0; // temperature variables
        float  tempc2=0; // temperature variables
        float samples1[campion]; // variables to make a better precision
        float samples2[campion]; // variables to make a better precision
        
        for(ii = 0; ii <= campion-1 ; ii++)
        { 
         samples1[ii] = (( 5.0 * analogRead(PinA1) * 100.0) / 1024.0);
         tempc1 = tempc1 + samples1[ii];
         
         samples2[ii] = (( 5.0 * analogRead(PinA2) * 100.0) / 1024.0);
         tempc2 = tempc2 + samples2[ii];
        }
        
        tempc1 = tempc1/campion; // better precision
        tempc2 = tempc2/campion; // better precision
        
        char buffer1[10];
        char buffer2[10]; // just give it plenty to write out any values 
        String stA1 (floatToString(buffer1, tempc1, 1)); //converto float in string
        String stA2 (floatToString(buffer2, tempc2, 1)); //converto float in string

questa libreria potrebbe darti problemi su float troppo lunghi e/o complessi, ma per delle temperature va più che bene

ciao

grazie a tutti.
tutte le vostre risposte funzionano.
prima di leggerle avevo risolto il problema nel seguente modo funzionante:
int temp1 = (temp - (int)temp) * 100;
sprintf(ascii,"GET /arduino.php?temp=%0d.%d", (int)temp, temp1);
come la trovate questa soluzione?
grazie

la sprintf occupa un sacco di spazio, ma è molto comoda e intuitiva