Go Down

Topic: Comandare con modulo RTC (Read 495 times) previous topic - next topic

Stilita

Buongiorno, mi spiego...
sto provando il modulo rtc, riesco a farlo andare e impostarlo.
Un ulteriore passo importante è fare in modo che ad una certa ora "...fai qualcosa..."
Per ora ho solo l'idea di interrogare la rtc.getTimeStr(), sono sulla strada giusta?

Ciao

Ps: però ho notato che la funzione citata ha il formato xx:xx:xx
      quindi in una if non la vedrebbe come un numeo...
...non sapete quanto ho cercato...pfui pfui
prima di rivolgermi al forum...

nid69ita

#1
Jun 04, 2018, 11:05 am Last Edit: Jun 04, 2018, 11:15 am by nid69ita
Non esiste IL MODULO RTC e non esiste quindi una unica libreria.
Serve sapere di quale RTC parli e quale libreria usi.
Comunque di solito le lib permettono di avere le info spezzate in più "variabili" esempio ora, minuti, secondi come numeri separati
Esempio della libreria: http://www.rinkydinkelectronics.com/library.php?id=73
Code: [Select]
DS3231 rtc(SDA,SCL); ...
Time t=rtc.getTime();
byte ora=t.hour();
byte min=t.min();
byte sec=t.sec();
my name is IGOR, not AIGOR

torn24

Dipende dal componente e soprattutto dalla libreria che utilizzi!
Avere un intero orario sotto forma di stringa non è la cosa più utile, in quanto dovresti ricavare le ore e i minuti.

Invece se la tua libreria ha metodi che restituiscono ore e minuti, le assegni a due variabili ore e minuti, e con un semplice if() puoi programmare un azione. if(ore==12 && minuti==30) allora fai qualcosa.

Stilita

Uso il modulo rtc 1302, e comunque,  come prima cosa, dai vostri suggerimenti, ho capito che devo andare a studiarmi la libreria, e dalle variabili spezzate averne una sola dopo aggiustamento aritmetico per poi fare un confrondo "if"...continuo a studiare
Grazie
...non sapete quanto ho cercato...pfui pfui
prima di rivolgermi al forum...

nid69ita

#4
Jun 04, 2018, 02:45 pm Last Edit: Jun 04, 2018, 02:45 pm by nid69ita
Code: [Select]
Time t=rtc.getTime();
byte ora=t.hour();
byte min=t.min();
byte sec=t.sec();
long totora=ora*10000L+min*100+sec;  // 10:23:18 => cifra 102318
long totsec=ora*3600+min*60+sec;     // in secondi totali

In "secondi totali" io lo trovo scomodo.   10:23:18 sono 37398 secondi, difficile ragionarci
Invece in unica variabile puoi fare un if con un solo confronto scrivendo le costanti in maniera leggibili, esempio
    if( totora>=103000)
my name is IGOR, not AIGOR

Claudio_FF

Quote from: Stilita
fare in modo che ad una certa ora "...fai qualcosa..."
Io leggo periodicamente l'RTC e controllo se il minuto attuale è cambiato rispetto all'ultima lettura.

All'istante del cambio di minuto vado a controllare con una serie di if se con ora e minuti attuali c'è qualcosa da fare.

Si può usare sia una variabile ora*60+minuti (da 0 a 1439), sia il metodo descritto da nid69ita ora*100+minuti.

Il primo metodo è più comodo se si devono calcolare intervalli o misurare il trascorrere del tempo, il secondo per rappresentare i tempi in modo leggibile.

E naturalmente ogni volta aggiorno la variabile ultima lettura al minuto attuale.
* * * * Una domanda ben posta è già mezza risposta * * * *

giondalar77

Ciao

potresti impostare l'ora di allarme attraverso una funzione che per ora non ricordo il nome e poi basta che controlli nel loop se l'allarme è scattato e di conseguenza fare qualcosa…E' secondo me la soluzione migliore piuttosto che controllare ogni volta l'ora...

Se ti interessa dopo verifico il tutto e ti spiego

ciao

Stilita

#7
Jun 04, 2018, 06:38 pm Last Edit: Jun 04, 2018, 06:44 pm by Stilita
Proverò a fare come suggerite
solo che mi assento per qualche giorno
 al ritorno proverò  e farò sapere
 grazie a tutti.
...non sapete quanto ho cercato...pfui pfui
prima di rivolgermi al forum...

Go Up