temperatura in ASCII. Mi mancherebbero i decimali..

Ciao sto eseguendo uno sketch per nextion display, il problema è che per impostare il testo devo convertire la temperatura in ASCII. Fin qui tutto bene, tranne che per pignoleria vorrei pure i decimali cosa che non riesco.. :cry: :cry: :cry: qualcuno potrebbe aiutarmi? indicandomi dove sbaglio e consigliarmi meglio?
grazie mille a tutti..

#include  "Nextion.h"   
#include "DHT.h" 

#define DHTPIN 2                
#define DHTTYPE DHT22   // DHT 22  (AM2302) 


NexText nex_tem  = NexText(0, 4, "t5");

char txt1[10];

DHT dht(DHTPIN, DHTTYPE);



void setup() {
  nexInit();  

}

void loop() {
  nex_tem.setText(txt1);

   memset(txt1, 0, sizeof(txt1));
    itoa(dht.readTemperature(), txt1, 10);

}

Scusa è ... ma se usi itoa() che converte un INTERO in stringa, cosa pretendi ? dht.readTemperature(), se vai a studiare la libreria, restituisce un float ... ovvio che se fai la conversione in intero, perdi i decimali.

Ti allego un modulo .h che devi inserire nella stessa cartella del tuo sorgente e che devi includere ...
... contiene la funzione floatToString() che ti converte un float in stringa del 'C' con il numero di decimali specificato. :wink:

Leggiti bene il commento in testa al codice per capire i vari parametri che la funzione richiede.

Guglielmo

floatToString.h (1.71 KB)

Grazie mille, proverò.. faro sapere

Mi spiace, ma ho letto però non capisco come applicarla.. lascio i gradi così ed amen. mi sembra molto complicato il tutto..

grazie cmq

Quanti decimali ti servono? immagino uno basti vista la scarsa precisione del sensore, quindi ...
floatToString(stringa_c_che_verrà_riempita, valore_float, 1, lunghezza_massima_della_stringa);

Prova e fammi sapere il risultato.

Guglielmo

Credo sia cosi allora??

[/#include  "Nextion.h"   
#include "DHT.h" 
#include "floatToString.h"


#define DHTPIN 2                
#define DHTTYPE DHT22   // DHT 22  (AM2302) 


NexText nex_tem  = NexText(0, 4, "t5");

char txt1[10];
float temperatura = 0;


DHT dht(DHTPIN, DHTTYPE);



void setup() {
  nexInit();  

}

void loop() {

  temperatura=dht.readTemperature();
  
  nex_tem.setText(txt1);

   memset(txt1, 0, sizeof(txt1));
   floatToString(txt1,temperatura,1,10);

}code]

Però non mi accetta la libreria floatToString, oppure non ho capito io..

Hai messo, come ti ho detto, il file .h nella stessa cartella del .ino ? ? ? Perché a me compila senza errori ...

Ah ... se dichiari un array di 10 char ... hai massimo 9 caratteri più il terminatore 0x00, non 10 caratteri.

Guglielmo

Si scusa è a posto. avevo copiato il file nella cartella originale mentre usavo una copia. ora funziona tutto.. grazie mille per l'aiuto. buona serata

Bene :slight_smile: ... buona serata anche a te !

Guglielmo