Come è ben noto, per limitare le dimensioni del codice generato, il "core" di Arduino è predisposto per NON includere il supporto dei float/double nelle funzioni tipo sprintf() che fanno parte di <stdio.h>.
Se difatti prendete questo banale programma:
double f = 12.5;
char sf[10];
void setup() {
delay ( 500 );
Serial.begin ( 115200 );
sprintf ( sf, "%f", f );
Serial.print ( "Valore di f: " );
Serial.println ( sf );
}
void loop() {
delay ( 500 );
}
... vedrete che stamperà sul monitor seriale "Valore di f: ?" ovvero, NON effettuerà la conversione in stringa del float.
Ora, se siete disposti a sacrificare circa 1.5 KBytes in più di memoria programma (flash) allora e abbastanza facile attivare il supporto dei float/double nel IDE classico.
Quello che dovrete fare è create un file di testo (mi raccomando, NON deve contenere caratteri speciali o formattazioni, solo testo) di nome "platform.local.txt" ed al suo interno ci dovete mettere questa stringa:
compiler.c.elf.extra_flags=-Wl,-u,vfprintf -lprintf_flt -lm
... salvato il file lo dovete copiare nella cartella relativa alla piattaforma AVR di Arduino, quella dove si trovano anche i files "board.txt", "platform.txt", "programmers.txt" e varie cartelle.
ATTENZIONE, se usate la versione "portable" del IDE, dovete andare dentro "portable" >> "packages" >> "arduino" >> "hardware" >> "avr" >> "1.8.5" (l'attuale versione del "core", in futuro questa cartella potrebbe cambiare nome).
Fatto questo rilanciate l'IDE, compilate, eseguite e ... "Valore di f: 12.5" ![]()
Spero possa essere utile ... ![]()
Guglielmo