Termostato a timer a piu step

Buongiorno a tutti,
sto cercando di realizzare, un termostato a time a piu step.
mi spiego meglio.

vorrei che mantenga una certa temperatura per un determinato tempo, passato questo tempo deve passare al prossimo step, una altra temperatura e un altro tempo , finiti tutti gli step spegnersi.

per ora sono riuscito a farlo funzionare con uno step , ma non riesco ad aggiungere un secondo step. ho provato diverse soluzioni ma nessuna giusta.

vi allego lo sketch attuale.

spero tanto che qualcuno mi possa aiutare a capire meglio come fare.
buona giornata

test_2_termostato_timer_1_step.ino (541 Bytes)

Ciao . Vorrei creare 2 intervalli , uno di 10min ,è uno 5min . Il problema è che non riesco ad aggiungere il secondo step nel loop. Perché quando ricomincia il loop . Mi prende ancora in considerazione il primo .

diciamo che in questo modo, dopo 30 secondi dall'accensione ( o dopo un Reset ), qualunque cosa tu faccia , il pin 3 te lo mette sempre in LOW

if(millis() > 30000 ){
      digitalWrite(3, LOW);
     }

docsavage:
...oppure una for a vuoto, del tipo for (;1;), che viene eseguita sempre......, e ferma la loop

... va bene anche senza quel '1' ... for( ; ; ); ... e sei "morto", da li non esci più :smiley: :smiley: :smiley:

Guglielmo

P.S.: ... è esattamente il for() con qui viene richiamata la funzione loop() nel core :wink:

docsavage:
sono perdonato?

Guglielmo

2bfly:
Ciao . Vorrei creare 2 intervalli , uno di 10min ,è uno 5min . Il problema è che non riesco ad aggiungere il secondo step nel loop. Perché quando ricomincia il loop . Mi prende ancora in considerazione il primo .

mah...
prima di tutto devi trovarti il modo di "sapere" come fai a stabilire se sono passati 10 minuti, devi fare un confronto tra millis,

appena la temperatura entra nel range una variabile prende il valore di millis in quel preciso momento,
una cosa del genere

setup
k=0
k2=0
unsigned long tempo_trascorso1
loop
if (temp >=25 && temp <=27){digitalWrite(3,LOW), k2=1, k=1;
if ( k==1) tempo_prima_lettura=millis(),k=0;
// qui prendi il tempo millis solo una volta perche k viene portato subito a 0

if ( k2==1) tempo_trascorso1=millis() - tempo_prima_lettura;
//qui tempo_trascorso1 conta il tempo che passa dopo che la temperatura ha raggiunto il valore del range

poi con
if (tempo_trascorso1 > minuti che desideri) fai l'azione che desideri

Ciao ,
grazie a tutti per l'aiuto,
Ora faccio un po' di prove e vi faccio sapere come procede .