Convertire un float in 2 char

Ciao,
sto facendo un cronotermostato, vorrei visualizzare la temperatura a centro display con un carattere molto grande, ho trovato un font da 112X160 solo numeri, ma non ho il punto o virgola.
Il valore temperatura lo salvo in una float con un decimale, vorrei quindi visualizzare il numero intero, poi disegnare un pallino e infine visualizzare il numero decimale; mi è venuta questa idea per poter inserire il punto.
Però non so come scomporre il float per salvarmi la singola cifra decimale, sia in char o come byte.
potete darmi un consiglio?
Grazie

Puoi usare snprintf() ad esempio

    char buf[10];
    float temp = 15.02;
    snprintf(buf, sizeof(buf), "%03d.%02d\0", (int)temp , (int)(temp  * 100)%100);
    Serial.prinln(buf);
    
    temp = 1.6;
    snprintf(buf, sizeof(buf), "%02d.%02d\0", (int)temp , (int)(temp  * 100)%100);
    Serial.prinln(buf);

Ciao,
grazie, mai vista questa funzione, la provo più tardi, ma perchè l'array buf è da 10 caratteri? Non basta 3 caratteri? Nel mio caso, visto che ho 2 cifre per l'intero e una dopo la virgola...
Grazie

Si tratta solo di un esempio, giusto per avere un po' di margine.
Per la tua applicazione, se vuoi visualizzare il testo nel formato XX.XX, ne bastano 5 + 1 (per l'eventuale terminatore di stringa '\0' se la libreria che usi lo richiede).

snprintf - C++ Reference (cplusplus.com)

Rieccomi,
o sbaglio qualcosa io, oppure devo trovare altro modo, come hai suggerito si crea una stringa di caratteri, col terminatore, ma non mi aiuta per il mio problema, uso la libreria UTFT che come istruzioni per stampare sul display ha la stringa, il numero intero e i float.
Perciò io devo stampare i due numeri dell'intero in una posizione, creare un punto e stampare il decimale in una posizione dopo il punto.
Ho provato a mettere questa funzione, ma non la compila:

myGLCD.print(temp_displ[0], 350 , 150);

mi compila solo stampando tutta la stringa:

myGLCD.print(temp_displ, 350 , 150);

Perciò ho necessità di avere i numeri come byte, o int etc
Spero di non aver detto cavolate :smiley:

E se tratti tutto come intero? Ovviamente moltiplicato per 10, così 32,5 gradi diventano 325.
Poi dividere le prime 2 cifre dall'ultima diventa solo un'operazione tra interi.

1 Like

Si, posso farlo, giusto, ma non so come staccare l'ultima cifra :frowning:

intero = temp / 10;
decimale = temp % 10;
1 Like

ottimo, grazie, così funziona :slight_smile:
Ho imparato una cosa nuova, grazie :slight_smile:

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.