nid69ita:
@docdoc lui legge troppo velocemente anche il sensore temperatura dht. Secondo me pure quello dovrebbe leggerlo solo ogni tanto.
Si, concordo, tra l'altro che variazioni di temperatura e umidità potrà mai avere anche in un quarto di secondo? Io la leggerei ogni 5-10 secondi, non di meno, e senza usare tutti quei delay() ma con millis().
E tra l'altro, per dirla tutta, un po' tutto il codice si potrebbe/dovrebbe ottimizzare, oltre a cercare di rendere pià leggibile e gestibile il listato togliendo tutte quelle inutili righe vuote, sfilze di if else if, poi dare nomi decenti alle variabili (come y, w e z, i nomi da una lettera li si usa per gli indici...), dare un nome ai codici di stato invece di usare il numero, impostare delle costanti per i pin, eccetera eccetera... 
orzowilde:
Ah ok ottima soluzione, ma tanto per essere curioso, se legge continuamente l'ora o la temperatura o altro, o la legge ogni 250ms cosa cambia a livello di funzionalità?
Che potrebbe succedere?
In generale nulla di particolare (tranne il fare cose inutili o inutilmente più spesso di quanto serva non è mai il massimo, come scrivere sull'lcd una cosa che è già presente), ma dato che usi estensivamente i delay() non hai il controllo del timing delle azioni, mentre usando millis() puoi fare le cose solo quando serve veramente. Questo si fa, insieme a millis(), implementando una macchina a stati finiti che mi sembra tu abbia cercato di implementare.
Ma al di là di tutto, ti consiglio di ottimizzare il codice intanto facendo le cose che ho scritto sopra, come: togli le righe vuote inutili, lasciane solo una tra blocchi in qualche modo da "evidenziare", imposta dei #define per i codici degli stati, imposta delle "const byte" per la configurazione dei pin (entrambi questi blocchi mettili insieme in testa al programma così sono ben visibili e gestibili), poi per codici più lunghi di qualche decina di righe metti la graffa di apertura insieme allo statement (es. non "if (condizione)" e poi a capo la graffa, ma "if (condizione) {"), la gestione dei dati sullo schermo mettila in una funzione "aggiornaLcd()" al limite con un parametro per dire cosa visualizzare, e così via.
Come altre cose "secondarie" ma sempre per migliorare la leggibilità, direi invece di "lcd.print((char)223);" crea una "#define GRADI 223" quindi fai "lcd.write(GRADI);".
Ovviamente sono tutti consigli non "operativi" ma ti assicuro che all'aumentare della complessità del codice, un listato poco leggibile (da te ma anche per noi) genera una difficoltà di debug esponenzialmente maggiore...