memorizzare dati su sd variabili float su comando sprintf

Salve a tutti, sono nuovo di questo forum.... da poco sto usando arduino... diciano che a livello elettronico non ho nessun problema ma a livello software.... sto realizzando un flussometro carburante per il mio gommone.... ma sto avendo problemi a memorizzare il file mi spiedo il file memorizzato oltre a data ora memorizza due variabili "consumo totale" e consumo istantaneo sono variabili con virgola cioè float...ma non riesco con il comando sprintf a memorizzare bene il file mi aiutate? no so se per i float va bene... %2.2f %2.2f solo che mi esce un punto interrogativo al posto del valore
questo è il codice.

void saveData(){

if (millis()>(timer+10000))
{
DateTime now = RTC.now();
sprintf(buffer_TOTAL, "%02d/%02d/%d %02d:%02d:%02d %2.2f %2.2f", now.day(), now.month(), now.year(), now.hour(), now.minute(), now.second(), litri_tot, consumo_istantaneo);
Serial.println(buffer_TOTAL);

myFile = SD.open("dati.log", FILE_WRITE);
if (myFile) {
myFile.println(buffer_TOTAL);
myFile.close();
} else {
Serial.println("error opening data.log");
LCD_Print();

}
timer=millis();
}
}

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare.
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

La sprintf() per gli AVR non supporta la %f, in quanto quel codice è molto pesante.

ho fatto la mia presentazione... ma miccorre sempre un vs consiglio....

come posso risolvere per memorizzare due variabili float su sdcard insieme al data e a l'ora?
grazie di tutto.

Puoi usare la dtostrf() per conversione da float a testo:

Oppure puoi stampare due long per ogni float, la parte intera e la parte decimale con un carattere punto '.' in mezzo.
Passi per la parte intera a long, fai un cast. A litri_tot aggiungi solo (long)litri_tot e così hai la parte intera stampabile con %2d
Per la parte decimale, dovrebbe bastare il calcolo (litri_tot-(long)litri_tot)*100 ottenendo così 2 dei decimali.

nid69ita:
Puoi usare la dtostrf() per conversione da float a testo:
http://www.atmel.com/webdoc/AVRLibcReferenceManual/group__avr__stdlib_1ga060c998e77fb5fc0d3168b3ce8771d42.html

Oppure puoi stampare due long per ogni float, la parte intera e la parte decimale con un carattere punto '.' in mezzo.
Passi per la parte intera a long, fai un cast. A litri_tot aggiungi solo (long)litri_tot e così hai la parte intera stampabile con %2d
Per la parte decimale, dovrebbe bastare il calcolo (litri_tot-(long)litri_tot)*100 ottenendo così 2 dei decimali.

grazie ho risolto grazie a dtostrf() ho creato due stringe da passare poi a sprintf con %s ora tutto funziona alla grande.