Termostato con Arduino UNO: Errori di visualizzazione temperatura e umidità

Buongiorno a tutti;
Per scopi didattici come da titolo vorrei creare un termostato con Arduino UNO e cioè fare in modo che se la temperatura scende sotto un certo valore preimpostato si attivi una caldaia (un LED, un relè).

Ho abbozzato aiutandomi con il web questo sketch che in parte sembra funzionare, unico problema sono la visualizzazione dei valori che vengono mostrati sul display non correttamente.

// Carico le librerie
#include <LiquidCrystal.h>
#include "DHT.h"
// Definisco il pin del sensore
#define DHTPIN 2
// Definisco il tipo di sensore
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
// Definisco a quali pin è connesso il display
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
// Definisco che il pin 13 è quello a cui è connesso il led
const int ledPin = 13;
void setup() {
// Setto il tipo di display (colonne, righe)
lcd.begin(16, 2);
// Scrivo sul display le parole fisse
lcd.print("Tem."); //Temperatura
lcd.setCursor(0,1);
lcd.print("Umi."); //Umidità
lcd.setCursor(10,0);
lcd.print("Cald"); //Caldaia
pinMode(ledPin, OUTPUT);
}
void loop() {
int t = dht.readTemperature();
int h = dht.readHumidity();
// Posiziono il cursore alla colonna 6 e riga 0
lcd.setCursor(6, 0);
lcd.print(t);
// Posiziono il cursore alla colonna 6 e riga 1
lcd.setCursor(6, 1);
lcd.print(h);
// Setto il limite di temperatura minore o uguale a 17 gradi
if (t <= 17) {
//LED acceso
digitalWrite(ledPin, HIGH);
// Posizione il cursore alla colonna 10 e riga 1 
lcd.setCursor(10, 1);
lcd.print("Acc"); //Accesa
}
else {
// LED spento:
digitalWrite(ledPin, LOW);
// Posiziono il cursore alla colonna 10 e riga 1
lcd.setCursor(10, 1);
lcd.print("Spe"); //Spenta

}
}

A livello hardware ho collegato tutto correttamente, display, sensore DHT11, breadboard, Arduino UNO eccc...
A livello software il problema adesso sta che sul display sia la temperatura che l'umidita vengono visualizzate con tre cifre del tipo:
Tem. 111 che dopo qualche secondo diventa 011 per poi tornare dopo qualche secondo a 111
Umi. 149 che dopo qualche secondo diventa 049 pe rpoi tornare dopo qualche secondo a 149
Qalcuno potrebbe illuminarmi su come mai di questo errore?
Consigli?!
Grazie a tutti in anticipo.
IMG_20211107_115958|375x500

Prova a stampare sul serial monitor i valori i h e t, es:

Serial.println(h);

Copia parte dell'output del serial monitor e postalo.

Ciao.

Fatto come mi hai appena detto.
Adesso apro il serial monitor e questo è quello che vedo:
per un attimo parte la visualizzazione di una serie di numeri 11, 149.... poi 0000000000.
Chiudo il serial monitor riapro lo stesso e nuovamente visualizzo 11, 149 e successivamente 000000...
Immagine 2021-11-07 140517

Nel setup aggiungi:

dht.begin();

Poi ricorda che i metodi readTemperature() e readHumidity() resituiscono un valore in virgola mobile, cioè un float al posto di int,

Ciao.

Provvedo...
Immaginavo che fosse qualcosa del genere ma non sapendo come procedere chiedevo alla community.
Se volessi che readTemperature mi restituisca un int come dovrei fare?

Dopo aver inserito

dht.begin();

I valori vengono letti continuamente lato seriale:

Per coerenza sarebbe bene dichiarare h e t come float e poi quando devi stampare scrivi:

Serial.println( (int) t );

Questo permette di fare calcoli con le temperature in virgola mobile per poi stampare la parte intera. Ma se non ti serve fare operazioni con la temperatura puoi lasciare h e t come int.

Se i dati visualizzati nel monitor seriale ti sembrano corretti puoi procedere a visualizzarli sul display.

Ricorda che sul display può avvenire una cosa strana del tipo
stampa 10 è realmente la temperatura è 10 gradi, se la temperatura vale 2 verrà visualizzato 20 perché lo 0 è rimasto dal precedente output, quindi conviene sempre pulire il campo con un lcd.print(" ")

Ciao.

Grazie per le info. Adesso sembra funzionare correttamente.
Immaginavo che qugli zeri in più fossero un refuso di qualche cosa che rimaneva dalla scansione precedente...