RTC evento a una determinata ora

Ciao a tutti ho una domanda che è molto semplice ma essendo alle prime armi volevo chiedervi.

Nello sketch con un real time clock come faccio a eseguire un determinato evento a un'ora precisa?

È giusto fare così?

if ((MyRTC.minute == 30) &&(myRTC.hours == 13)){ evento da programmare
}

Facendo così tutti i giorni alle 13.30 partirà l'evento o sbaglio qualcosa?

Grazie mille

Stefano

E' corretto

P.S. banalmente visto che indichi 13:30, magari meglio nell'if prima l'ora e poi i minuti. Inezia.

mah.. mi sembra lo stesso problema di chi cerca "beccare" millis() con un if :rage:

di solito si fa maggiore o uguale a.... >= con tutti gli acorgimenti necessari

Se non "becchi" una condizione che è vera per un intero minuto, mi sa che è l'ultimo dei problemi dello sketch :laughing:

1 Like

boh,,, la mia te l'ho detta,,,, se fai <= oppure >= vai sul sicuro in tutti i casi del genere.
poi che vuoi fare ? interrogare l'rtc ad ogni giro di loop?
poi sta "cosa" la vuoi tenere accesa 59 secondi ogni 24 ore?

e comunque se c'è una cosa che non manca sono prorio i timer di arduino

Anche interrogandolo ogni 10 secondi funziona sicuramente... Leggendo l'RTC a ogni giro o ogni decimo di secondo o secondo si ha una precisione superiore, ma secondo i casi può essere superfluo.
Come detto da cotestatnt, se il loop gira con un periodo maggiore di un minuto, c'è qualche altra cosa da "rivedere"... :slight_smile:

Premesso che personalmente non uso mai l'approccio ora/minuti/secondi, ma ragiono sempre in termini di tempo Unix, per come la vedo io spesso anche un tempo di loop() maggiore di un secondo è troppo (il che significa abbandonare completamente l'struzione delay )

Infatti di solito faccio un confronto diretto sul secondo e non ho mai avuto problemi (anzi mi tocca inserire un flag per evitare di chiamare più di una volta l'evento programmato).

if (tempCorrenteUnix == tempoProgrammatoUnix){ 
 // evento da programmare
}

Beh... Certo... Il loop dovrebbe girare con un periodo di qualche millisecondo o qualche decina di millisecondi, salvo in casi in cui si sia perfettamente coscienti di poterlo far fermare intenzionalmente fino alla pressione di un pulsante, perché è un programma molto semplice e/o non deve fare altro nel frattempo.

1 Like