Controllo orario

Ciao a tutti, ho un problema con i riavvii di arduino.
Per evitare alcuni blocchi del loop, ho inserito un watchdog con controllo ogni 4 sec; vorrei però che al riavvio della ciclica ci fosse un controllo sugli orari, ma non funziona...

Queste le partiche credo interessate dal problema:

int intTempVasca = EEPROM.read(EEP_TempVasca);
int intTempCentr = EEPROM.read(EEP_TempCentr);
int intTempPlafo = EEPROM.read(EEP_TempPlafo);
int DeltaTempVasca = EEPROM.read(EEP_deltaVasca);
int DeltaTempPlafo = EEPROM.read(EEP_deltaPlafo);
int DeltaTempCentr = EEPROM.read(EEP_deltaCentr);
int diurnaON[2] = {EEPROM.read(EEP_ORAdiurnaON), EEPROM.read(EEP_MINdiurnaON)};
int diurnaOFF[2] = {EEPROM.read(EEP_ORAdiurnaOFF), EEPROM.read(EEP_MINdiurnaOFF)};
int notte1ON[2] = {EEPROM.read(EEP_ORAnotte1ON), EEPROM.read(EEP_MINnotte1ON)};
int notte1OFF[2] = {EEPROM.read(EEP_ORAnotte1OFF), EEPROM.read(EEP_MINnotte1OFF)};
int notte2ON[2] = {EEPROM.read(EEP_ORAnotte2ON), EEPROM.read(EEP_MINnotte2ON)};
int notte2OFF[2] = {EEPROM.read(EEP_ORAnotte2OFF), EEPROM.read(EEP_MINnotte2OFF)};
if ((diurnaON[0] >= rtc[2]) && (diurnaON[1] >= rtc[1]) && (diurnaOFF[0] < rtc[2]) && (diurnaOFF[1] < rtc[1])) {
    LUCEon();
  }
  if ((notte1ON[0] >= rtc[2]) && (notte1ON[1] >= rtc[1]) && (notte1OFF[0] < rtc[2]) && (notte1OFF[1] < rtc[1]) || (notte2ON[0] >= rtc[2]) && (notte2ON[1] >= rtc[1]) && (notte2OFF[0] < rtc[2]) && (notte2OFF[1] < rtc[1])) {
    NOTTEon();
  }

per la gestione dell'RTC uso la libreria DS1307.h

Qualche idea/consiglio?

Come memorizzi gli orari e cosa contengono quegli " rtc[] " ?

o tutto o niente

Tutto lo sketch o niente risposte sensate.

Ciao Uwe

lo_sty:
Come memorizzi gli orari e cosa contengono quegli " rtc[] " ?

rtc[] è un'istanzadell'RTC

RTC.get(rtc, true);

quindi in ordine abbiamo

0_ secondi
1_ minuti
2_ ore
3_ gg settimana
4_ giorno
5_ mese
6_ anno

uwefed:
o tutto o niente

Tutto lo sketch o niente risposte sensate.

Ciao Uwe

Hai ragione (infatti avevo provato a postarlo ma superavo il limite di caratteri)... quindi ora lo allego! :slight_smile:

esercizio_temperature.ino (12.3 KB)

:confused:

Qualche idea/consiglio ?

:confused:

Una domanda:

se ho dichiarato rtc[] come intero, posso confrontare direttamente il valore letto da EEPROM?
esempio:

if(EEPROM.read(EEP_ORAdiurnaON) >= rtc[2]){

}

Credo che tu stia usando una MEGA: il watchdog non funziona regolarmente, almeno nelle versioni precedenti di IDE.

Si uso una mega, il watchdog l'ho inserito perché avevo problemi di blocchi, come posso verificare se funziona correttamente?
Per il momento ho visto che ci sono stati dei riavvii (suppongo dovuti al mancato reset).

Il buon Leo ha scritto un paio di articoli sul watchdog.

Nel secondo alla fine parla di un difetto del watchdog nella MEGA che potrà interessarti:
http://www.leonardomiliani.com/2013/impariamo-ad-usare-il-watchdog-2/