Modulo clock rtc1302, problema controllo ora

Salve a tutti, in un progetto piu ampio ho la necessita che arduino ogni mezzanotte mi aumenti una variabile, ottenendo in questo modo una sorta di contagiorno dal momento dell’attivazione.

Sono riuscito fino ad ora soltanto ad assegnare ad una variabile il valore dell’ora corrente:

String oraora = rtc.getTimeStr();

Questo comando assegna alla var oraora il valore in questo formato: xx:xx:xx
Quindi il controllo lo posso fare in questa maniera:

if(oraora == “20:46:00”);

la libreria utilizzata è ds1302.h

Il mio problema è che con tutti i delay all’interno del programma non riesco mai a beccare l’ora alla precisione del secondo, quindi mi basterebbe anche solo sapere quando è mezzanotte per poter aumentare il valore del contagiorni solo che non riesco a capire come fare per estrapolare solo i primi due valori della stringa che mi viene restituita;

Ringrazio anticipatamente a chi mi dedichera un po di attenzione

Senza il programma dare un suggerimento corretto è difficile, io fare una cosa del tipo:

  • Smetterei all'istante di usare la classe String e al limite passerei a stringhe classiche del C
  • Metterei qui il link della libreria usata, perché sospetto che il metodo per ottenere ora, minuto e secondo in modo separato li abbia

Poi detto questo la struttura che userei, per rendere il codice il più semplice possibile ci sono metodi più concisi, è una cosa tipo questa:

byte oraora = rtc.funzionePerPrendereOra();
byte minutoora = rtc.funzionePerPrendereMinuti();
byte giornoora = rtc.funzionePerPrendereIlGiornoAttuale();
if( giornoora!=vecchiogiorno && oraora  >= 20 && minutoora >= 46)
{
  incrementaTuavariabile;
  vecchiogiorno = gironoora;
}

Ciao, intanto grazie, sto cercando di documentarmi da giorni prima di scrivere qui ma non riesco ad uscirne :confused: :confused:

di seguito i comandi della libreria che uso:

DS1302 KEYWORD1
Time KEYWORD1
DS1302_RAM KEYWORD1

getTime KEYWORD2
setTime KEYWORD2
setDate KEYWORD2
setDOW KEYWORD2
getTimeStr KEYWORD2
getDateStr KEYWORD2
getDOWStr KEYWORD2
getMonthStr KEYWORD2
halt KEYWORD2
writeProtect KEYWORD2
setTCR KEYWORD2
writeBuffer KEYWORD2
readBuffer KEYWORD2
poke KEYWORD2
peek KEYWORD2

hour KEYWORD2
min KEYWORD2
sec KEYWORD2
date KEYWORD2
mon KEYWORD2
year KEYWORD2
dow KEYWORD2

FORMAT_SHORT LITERAL1
FORMAT_LONG LITERAL1

FORMAT_LITTLEENDIAN LITERAL1
FORMAT_BIGENDIAN LITERAL1
FORMAT_MIDDLEENDIAN LITERAL1

MONDAY LITERAL1
TUESDAY LITERAL1
WEDNESDAY LITERAL1
THURSDAY LITERAL1
FRIDAY LITERAL1
SATURDAY LITERAL1
SUNDAY LITERAL1

TCR_D1R2K LITERAL1
TCR_D1R4K LITERAL1
TCR_D1R8K LITERAL1
TCR_D2R2K LITERAL1
TCR_D2R4K LITERAL1
TCR_D2R8K LITERAL1
TCR_OFF LITERAL1

la libreria l'ho scaricata da qui: DS1302 - Rinky-Dink Electronics

l'intero programma ancora lo devo scrivere, per ora sto sviluppando le funzioni separatamente.
il progetto prevede l'utilizzo del DHT11 per temperatura ed umidita, l'utilizzo di un rele, un display lcd per leggere le informazioni e interagire con il programma (tramite un menu) per settare i vari valori da pannello con l'utilizzo di pulsanti e non tramite ide.
per ora tutto mi funziona e volevo integrare l'utilizzo dell'rtc per avere un'informazione in piu(contagiorni).

in pratica il tutto mi andrà a gestire un'incubatrice di uova, ed il contagiorni mi serve proprio per contare i giorni alla schiusa e gestire allarmi visivi (led e lcd) ed acustici (buzzer).

Grazie infinite.

Quella librerie ha solo metodi che restituiscono stringhe (come classe String e non come array di char), io l'abbandonerei immediatamente e senza pensarci su due volte in favore di una di quelle presenti nel gestore librerie dell'IDE.
Apri il gestore librerie, scrivi 1302 o rtc guarda tra quelle disponibili e vedi quale torna meglio a te usare, Es. Rtc by Makuna ha tutti i metodi necessari a prelevare i valori in formato numerico (non è un consiglio io non ricordo cosa ho usato per fare alcune prove in passato forse quella di Adafruit, leggi i vari siti collegati alle librerie per capire quale fa più comodo a te) e con quelli fare ciò che devi (o come ti ho suggerito io nell'altro post)

Sei stato gentilissimo, stasera ci provo e ti aggiorno.