Time library, settare l'ora su arduino

Ciao a tutti!
Scusate la domanda sciocca ma ci sto sbattendo la testa da ormai una settimana... Spero possiate aiutarmi

Sto cercando di fare uno sketch per settare l'ora su Arduino Uno in modo poi da usarlo con copia incolla su vari altri progetti quali accensione di luci, irrigazione ed altri.
Pensavo fosse più facile fare una cosa del genere, invece è troppo tempo che giro su internet senza ottenere risultati.

In pratica cerco:

  • Uno sketch non troppo complicato che mi definisca l'ora corrente attuale.
  • Un altro o lo stesso programma che svolgerà un azione in una data futura (uso di un pin).
  • UNA LIBRERIA TIME correlata, dato che ogni progetto diverso usa una sua libreria time e io sto impazzendo.

Su internet ho trovato ben poche cose, e ho provato tutti i primi risultati di Google senza ottenere un programma funzionante. La mia esperienza di programmazione è davvero insignificante e per questo gli sketch lunghi e complicati faccio fatica a leggerli e modificarli :confused:
Sono provvisto anche di un modulo RTC con DS1302 che non son riuscito a far funzionare.

Siccome penso che sia uno sketch diffuso, se qualcuno di voi ha già il programma preparato e me lo può condividere o spiegare come ottenerlo, gliene sarei davvero troppo grato :slight_smile:

PS. giusto per capire la meccanica di Arduino, non c'è alcun modo per accendere automaticamente il modulo Arduino ad un ora prestabilita, magari usando l'RTC? Cioè, volevo risparmiare energia usando Arduino, ma se deve rimanere sempre acceso in attesa dell'ora giusta, penso che usarlo sia più che altro uno spreco di corrente :cry:

Non ho capito molto.
Dici "ho anche un RTC.." ! perchè, senza come pensi di avere l'ora corrente ? Arduino NON ha un orologio interno.
Di RTC ci sono molti moduli con chip differenti, non ricordo le sigle ma mi pare il 1302 sia tra i più imprecisi. Mi pare più preciso sia il ds3231 che è I2C e quindi bastano i 2 pin SDA/SCL

Per far accendere Arduino da un RTC credo si possa fare, l'RTC può essere settato anche come "allarme" che scatta e su un pin da segnale. Anche qui, non ricordo se tutti i chip rtc lo possono fare e io non l'ho mai fatto.
http://forum.arduino.cc/index.php?topic=168421.0

C'è una libreria "Time" generica fatta da Paul Stoffregen, a cui solitamente le varie librerie che si interfacciano con i vari RTC si ricollegano, fornendo ad essa un modo per recuperare l'ora attuale.

Tuttavia di librerie per il tuo RTC specifico trovo solo questa, che non mi pare si interfacci con la Time.h. Però vedo che tra i suoi esemp c'è un SetClock, per cui dovresti comunque riuscire a farci quanto desideri.

C'è anche qualcosa sul playground qua e qua, ma non ne conosco l'affidabilità né sono certo compilino con l'attuale versione dell'IDE.

Non so, alcune librerie che ho provato tra cui:

http://playground.arduino.cc/Code/DateTime
http://playground.arduino.cc/Code/Time

dicono chiaramente "without external timekeeping hardware": ho interpretato che l'RTC allora non fosse strettamente necessario

Senza un RTC il tempo segnato da un Arduino è moooolto impreciso.
Anche quel ds1302 è moooolto impreciso, perde anche 2 minuti a settimana mi pare.
http://playground.arduino.cc/Main/DS1302

Per me meglio se compri un RTC3231 ed usi librerie di Adafruit

Non è strettamente necessario se imposti l'ora manualmente ad ogni accensione. Un RTC serve essenzialmente a mantenere l'ora reale quando il resto del sistema è spento, per questo ha una batteria. Quando il sistema si accende legge l'ora e va avanti.

Un'alternativa a questo è avere una connessione di rete per leggere l'ora da un server NTP.