Per prima cosa vi auguro buone feste sperando che l'anno nuovo inizi nel migliore dei modi.
Sto usando una RTC shield, basata sul DS1307.
Per prima l'ora e la data sembrerebbero funzionare, ma vorrei cambiare una cosa. quando sono le 12:05 io visualizzo sul serial monitor 12:5 mentre vorrei visualizzare 12:05. è possibile?
questa è la parte di codice relativa all'orologio
Con l'istruzione DateTime now = RTC.now(); carichi nella "variabile" now il valore dei registri del DS1307 che sono aggiornati continuamente.
In realtà now è tutta una serie di variabili (secondi, minuti, ore, ecc. rappresentati da now.second, now.minute, ecc.)
Per fare l'operazione contraria, cioè aggiornare i registri del DS1307, devi usare la funzione RTC.adjust(DateTime(anno, mese, giorno, ore, minuti, secondi));
Se non lo fai limitandoti a variare il valore di una o più variabili, all'aggiornamento successivo (now = RTC.now()), perdi il valore delle variabili modificate.
Sì ma come ti ha detto cyberhs in questo modo puoi sforare il massimo valore di "ora".
Ogni volta che incrementi una variabile temporale, devi ricordarti che se arrivi al suo massimo, devi ripartire da zero. Invece, decrementandola, se oltrepassi lo zero, devi ripartire dal suo valore massimo.
Prendiamo l'ora, che può andare solo da 0 a 23. Usiamo un tipo char, che può assumere valori da -128 a +127, in questo modo possiam gestire anche la condizione negativa.
Incremento:
if (digitalRead(PulsantePiu)) {
ora++;
if (ora > 23) {
ora = 0;
}
}
Decremento:
if (digitalRead(PulsanteMeno)) {
ora--;
if (ora < 0) {
ora = 23;
}
}
Per i minuti ed i secondi farai allo stesso modo, solo che il tetto massimo di entrambi sarà 59 e non 23.
Ovviamente quello illustrato qui sopra è il caso più semplice, ossia la regolazione dell'orario fatta sulle singole componenti delle ore, minuti e secondi.