Go Down

Topic: Termostato a timer a piu step (Read 601 times) previous topic - next topic

2bfly

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


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 .

brunello22

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


Code: [Select]

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

gpb01

#3
May 26, 2017, 07:06 pm Last Edit: May 26, 2017, 07:06 pm by gpb01
...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ù :D :D :D

Guglielmo

P.S.: ... è esattamente il for() con qui viene richiamata la funzione loop() nel core ;)
Search is Your friend ... or I am Your enemy !

gpb01

#4
May 26, 2017, 08:19 pm Last Edit: May 26, 2017, 08:19 pm by gpb01
Search is Your friend ... or I am Your enemy !

elrospo

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

2bfly

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

Go Up