Buonasera a tutti,
sono Luca e sono nuovo del Forum, lo so che della funzione Millis si è parlato e riparlato, ho letto molti articoli e seguito tutti i suggerimenti che ho trovato qui sul Forum, ma purtroppo non riesco ad uscirne fuori, sto realizzando un igrometro, funziona tutto ma non riesco a settare bene la temporizzazione, chiedo cortesemente una mano per risolvere questo problema:
Hardware:
Arduino Uno;
SHT21;
Display OLED 128x64;
Pulsanti di aumento e decremento del settaggio di intervento del deumidificatore;
vorrei che una volta raggiunto il valore di umidità impostato, ci fosse una pausa di 15 secondi prima di dare il consenso di accensione, la pausa deve avvenire anche quando il valore torna sotto quello impostato,
lo faccio per evitare continue accensioni e spegnimenti dovuti a variazioni di pochi secondi del valore rilevato, se non erro si chiama "differenziale", ma non ne sono sicuro.
il codice è questo:
void loop () {
pul_p = digitalRead (PULSANTEP);
pul_m = digitalRead (PULSANTEM);
diminuisci();
aumenta();
salva();
t = SHT2x.GetTemperature();
h = SHT2x.GetHumidity();
if (valore <= h) {
if (millis() - tempo_1 > (pausa_1)) {
digitalWrite (LED, HIGH);
}
}
if (valore > h) {
if (millis() - tempo_2 > (pausa_1)) {
digitalWrite (LED, LOW);
}
}
}
Ovviamente le variabili globali tempo_1 , tempo_2 e pausa_1 le ho dichiarate come unisigned long
la temporizzazione funziona in accensione solo la prima volta (neanche precisa a dire il vero) e quando il valore torna sotto la soglia impostata si spegne subito senza temporizzare, dopo non funziona più neanche in accensione.
Dove sbaglio?
Mi auguro di aver scritto bene il post rispettando tutte le regole, non vorrei suscitare le ire del moderatore Guglielmo che ho imparato a conoscere in questi giorni leggendo tanti post e che ormai temo come "l'uomo nero" quando avevo 3 anni
Dimenticavo, ho provato anche ad inserire questo codice:
if (valore <= h) {
if (millis() - tempo_1 > (pausa_1)) {
tempo_1 = millis();
digitalWrite (LED, HIGH);
}
}
if (valore > h) {
if (millis() - tempo_2 > (pausa_1)) {
tempo_2 = millis();
digitalWrite (LED, LOW);
}
}
}
ma funziona comunque male, i tempi sono sempre sballati.
Grazie ancora.