problema di controllo dell' DS1302 RTC

salve ragazzi sono nuovo nel forum sto scrivendo qui per il semplice motivo che non riesco a trovare un modo per verificare se ci sono dei dati in un rtc… vi spiego meglio.
ho un rtc ds1302 e uso la libreria DS1302.h quello che cerco di fare e semplice ovvero appena accendo il mio sistema faccio una if per controllare se nel ds1302 cè gia un orario memorizzato se no lo imposto altrimenti continuo. Il problema è che non riesco a trovare la condizione che interroga rtc per farmi dire se in memoria detiene un orario oppure no.grazie delle eventuali risposte

vi allego il file pdf delle istruzioni del rtc

DS1302.pdf (112 KB)

alla fine ho risolto ragazzi pero ancora non è finita allora girovagando per il web ho capito che la funzione rtc.getTimeStr() da una stringa quindi lo confrontata con il valore di default del rtc che è (00:00:00) (ore min sec) ed ho risolto. ma un altro problema simile mi tormenta ovvero io immetto su un contatore int un valore ad esempio 10 per farlo confrontare con la data corrente dovrei convertirlo in una stringa e mettero sotto questa forma ("10:00:00) come dovrei fare ??

int a=10;
String z=rtc.getTimeStr();

if(z>(“a:00:00”))…

dovrei semplicemente straformare il valore 10 int nel simbolo 10 stringa

non puoi fare un confronto tra due stringhe con il > o <. devi usare delle variabili numeriche.
nell’esempio “serial hard” trovi la soluzione:

t = rtc.getTime();
  
  Serial.print("It is the ");
  Serial.print(t.dow, DEC);
  Serial.print(". day of the week (counting monday as the 1th), and it has passed ");
  Serial.print(t.hour, DEC);
  Serial.print(" hour(s), ");
  Serial.print(t.min, DEC);
  Serial.print(" minute(s) and ");
  Serial.print(t.sec, DEC);
  Serial.println(" second(s) since midnight.");

in questo modo ottieni ore minuti e secondi direttamente in formato int e puoi fare il confronto con la tua variabile :wink:

alex101094:
girovagando per il web ho capito che la funzione rtc.getTimeStr() da una stringa

se avessi guardato nella libreria invece di girovagare per il web l’avresti scoperto in 2 secondi :wink:

grazie ma l avevo vista ma non capisco come utilizzarla ad esempio imposto con un contatore int a= 10
e faccio il confronto if((t.hour)>a) ma non funziona... ovviamente
ho definito come da esempio Time t=rtc.getTime()

posta il tuo codice

Time t=rtc.getTime();
if((t.hour)>a and (t.min)>b and (t.hour)<c and (t.min)<d) digitalWrite(pinled,HIGH);
else digitalWrite(pinled,LOW);

dove a,b,c,d sono variabili contatori interi che immetto con tasto

posta tutto lo sketch

Il registro a sola lettura 0x81 del DS1302 contiene nel bit 7 il flag (CF) Clock Halt Flag che se a 0 indica che il clock è partito.

Potresti usare la funzione readRegister(0x81) per leggere il contenuto del registro e sapere se il clock è in funzione o meno.