Orario con scheda RTC

Ciao, ho bisogno del vostro aiuto per modificare il valore dell’ora restituito dalla scheda, mi spiego meglio, vorrei poter aggiungere o togliere una o più ore al valore dell’ora attuale hour(), e visualizzare il dato ora e minuti nel formato 08:07 anzichè quello attuale 8:7.

Lo skatch e quello seguente

Grazie

/*

  • TimeRTC.pde
  • example code illustrating Time library with Real Time Clock.

*/

#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h> // a basic DS1307 library that returns time as a time_t

void setup() {
Serial.begin(9600);
setSyncProvider(RTC.get); // the function to get the time from the RTC
if(timeStatus()!= timeSet)
Serial.println(“Unable to sync with the RTC”);
else
Serial.println(“RTC has set the system time”);
}

void loop()
{
digitalClockDisplay();
delay(1000);
}

void digitalClockDisplay(){
// digital clock display of the time
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.print(" “);
Serial.print(day());
Serial.print(” “);
Serial.print(month());
Serial.print(” ");
Serial.print(year());
Serial.println();
}

void printDigits(int digits){
// utility function for digital clock display: prints preceding colon and leading 0
Serial.print(":");
if(digits < 10)
Serial.print(‘0’);
Serial.print(digits);
}

Non capisco la domanda, nello sketch c'è già ciò che ti serve. C'è la funzione printDigits che stampa lo "0" se il numero passato come parametro è inferiore a 10. Se vuoi usarlo anche per le ore sostituisci Serial.print(hour()) con printDigits(hour()).

Ciao, io vorrei vedere sia per l'ora che per i minuti lo 0 davanti ai numeri inferiori al 10, quindi ad esempio 09:07 e non 9:7.

Altra cosa vorrei sapere come togliere un ora da hour(), perchè ho provato con hour()-1 ma alle 0:0 mi a come orario -1:0 e non 23:0.

spero di essere stato chiaro

grazie ancora

Qualcuno mi può aiutare per cortesia..

Grazie Ciao

Per fare operazioni matematiche su data/ora e non avere problemi, la strada più veloce è lavorare in formato "Epoch" (Tempo Unix) in cui data e ora sono espressi da un NUMERO che normalmente indica i secondi passati da una data fissa (di solito il 01.01.1970).

Capisci bene che avendo un NUMERO è estremamente facile sommarci o sottrarci valori (1 ora = 3600 secondi) e poi riconvertire indietro il NUMERO in data/ora :)

Se fai un po' di ricerche qui sul forum, se ne è parlato varie volte ... e sono state indicate anche routines già pronte ...

Per il resto ... ti ha già risposto Leo.

Guglielmo

Scaricati e studiati QUESTA libreria del nostro mod Leo ed usala al posto della Time che stai usando (ovviamente devi adattare il programma) ... ;)

All'interno troverai anche le funzioni di conversione di data/ora nel formato Epoch (Unix Time).

Guglielmo

davrigo: Ciao, io vorrei vedere sia per l'ora che per i minuti lo 0 davanti ai numeri inferiori al 10, quindi ad esempio 09:07 e non 9:7.

Ripeto quanto ti ho detto. Nel codice che hai pubblicato c'è la funzione per fare ciò che dici.

leo72: C'è la funzione printDigits che stampa lo "0" se il numero passato come parametro è inferiore a 10. Se vuoi usarlo anche per le ore sostituisci Serial.print(hour()) con printDigits(hour()).

Dalla tua risposta mi viene da pensare che quel codice non sia tuo e che tu non sappia come funziona, giusto?

io in passato ho usato una libreria molto completa per sfruttare quel RTC, è la VirtuaBotixRTC. In quel caso, con quella libreria, il formato ore lo hai già di default in 00:00. Per la questione 0 davanti all'ora anche a me sembra ci sia già tutto l'occorrente per farla, non capisco dove trovi difficoltà. Infine per le operazioni con l'ora segui quello che diceva gpb01...è ovvio che se tu gli dici che da 0:0 ti deve togliere 1 lui farà 0-1=-1. Devi andare a specificare che vuoi fare operazioni matematiche temporali, non aritmetiche.