L’articolo RTC DS3231per arduino hai letto come impostare l’ora sul RTC DS3231 attraverso il monitor seriale.
Hai notato che non ho commentato lo sketch che puoi usare in quanto è un operazione preliminare che devi eseguire se vuoi leggere l’ora corretta sul DS3231 ma non è uno sketch che avrebbe senso modificare in un progetto.
In questo articolo potrai leggere, nel classico stile del blog, l’analisi riga per riga dello sketch che puoi usare come test del DS3231 con la libreria di JChristensen già scaricata per i impostare l’ora sul tuo RTC DS3231.
Riprendiamo i collegamenti
Prima di iniziare i test dello sketch riprendo l’immagine che hai già avuto modo di vedere nell’articolo precedente e che mostra come collegare l’RTC DS3231 ad arduino:
come vedi ti bastano 4 collegamenti 2 per l’alimentazione a 3,3v e Gnd e 2 per il protocollo I2C sui pin SDA ed SCL.
RTC DS3231 sketch test
Lo sketch di test per l’RTC DS3231 disponibile nella libreria che hai scaricato si chiama TimeRTC.ino e lo trovi tra fli esempi della libreria stessa:
/* * TimeRTC.pde * Example code illustrating Time library with Real Time Clock. * This example is identical to the example provided with the Time Library, * only the #include statement has been changed to include the DS3232RTC * library. */ #include <DS3232RTC.h> //http://github.com/JChristensen/DS3232RTC #include <Time.h> //http://www.arduino.cc/playground/Code/Time #include <Wire.h> //http://arduino.cc/en/Reference/Wire void setup(void) { 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(void) { digitalClockDisplay(); delay(1000); } void digitalClockDisplay(void) { // 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); }
iniziando dalle prime linee dopo i commenti trovi le linee 09-11: includi le librerie necessarie alla gestione del sensore DS3231 ( DS3232.h e Time.h ) ed alla comunicazione I2C ( Wire.h);
linea 16: richiami l’ora impostata nel RTC DS3231 con la funzione setSyncProvider(RTC.get) che ha il compito di recuperare dall’RTC il valore relativo alla data e l’ora;
linee 17-20: se il timeStatus è diverso dal timeSet non sei riuscito a sincronizzare l’ora con quella presente nell’RTC e li scrivi sul monitor seriale; al contrario puoi scivere a video che la sincronizzazione è avvenuta;
linea 25: all’interno del loop() quello che avviene è molto semplice, richiami la funzione digitalClockDisplay() con cui visualizzi il valore di data ed ora corrente nel monitor seriale;
linea 26: attendi un tempo di 1 secondo prima di richiamare nuovamente la funzione loop();
linea 29: definisci la funzione digitalClockDisplay();
linea 32: scrivi sul monitor seriale il valore restituito dalla funzione hour() della libreria DS32232.h che indica l’ora correntemente settata nel tuo RTC DS3231;
linea 33: scrivi sul monitor seriale il valore dei minuti correnti passando dalla funzione printDigits() che è definita alla linea 44;
linee 34-41: continua a scrivere sul monitor seriale i valori relativi a tutti gli altri parametri della data e dell’ora;
linea 44: definisci la funzione printDigits() richiamata alla linea 33;
linea 48: scrivi sul monitor seriale “:” in modo che dopo l’ora siano printati i “:” ( senza virgolette );
linee 49-50: controlla che il valore di digits sia inferiore a 10 in tal caso la linea 50 scrive sul monitor seriale uno “0” ( senza virgolette ) in questo modo avrai sempre i minuti composti da due digits ( 01,02, .. 09,10,11 … 59,60 )
linea 51: finalmente scrivi sul monitor seriale il valore di digits corrente;
13 commenti
1 ping
Vai al modulo dei commenti
ciao Mauro,
sono poco esperto, ma sono curioso del funzionamento del Ds3231. Se vorrei far fare una certa azione ad arduino, ad un certo orario, come si potrebbe modificare lo sketch?
Autore
Ciao Massimo,
puoi usare gli esempi che ho scritto per il DS1307 ed adattare solo le chiamate per il DS3231
ciao mauro…ti scrivo anche qui…
io ho la mega 2560 e mi sono accorto che sui pin digit ci sono pin digit
SDA e SCL….
ho collegato i cavi del DS3231 a questi e gli altri GND E 3,3 VOLTS
ho lanciato il tuo sketch e va tutto bene….
la data che scorre e il primo gennaio 2000 e mi dice di settare la data;
ho caricato tutte le librerie possibili DS3232RTC-master, Time-master e provato tutti gli esempi che
ho trovato dentro….
provo a settare la data come dici tu……ma niente da fare….
che faccio?
Autore
Ciao Lino,
intendi che non la imposta o ti da qualche altro tipo di errore?
tutto ok…grazieeeee!!!
Buonasera, sono antonio, possiedo un arduino nano un ds3231 e vorrei realizzare un semplice timer che ogni 48 ore mi dia un uscita qualsiasi alta per 1 ora, poi il processo continua all’infinito, grazie.
Autore
Ciao Antonio,
hai letto i miei articoli su come realizzare una sveglia con arduino o una centralina di irrigazione ?
Puoi prendere spunto da quelli ed adattarli al tuo RTC, non ha senso riscrivere tutti gli articoli per ogni tipo di RTC esistente.
non riesco a far funzionare le librerie indicate nello sketch le ho scaricate e messe nella cartella librerias del compilatore ma quando faccio verificare lo sketch mi dice trovata libreria non valida…non riesco ad uscircene…
Autore
Ciao Fabrizio,
prova con il Gestore Librerie.
Buona sera,
ho riscontrato un grave problema con le librerie. Riporto di seguito il messaggio di errore:
Arduino:1.8.3 (Windows 7), Scheda:”Arduino/Genuino Uno”
In file included from C:\Users\Utente\Desktop\example1\example1.ino:1:0:
C:\Users\Utente\Documents\Arduino\libraries\DS3232RTC/DS3232RTC.h:136:26: error: ‘tmElements_t’ has not been declared
static byte read(tmElements_t &tm);
^
C:\Users\Utente\Documents\Arduino\libraries\DS3232RTC/DS3232RTC.h:137:20: error: ‘tmElements_t’ has not been declared
byte write(tmElements_t &tm);
^
exit status 1
Errore durante la compilazione per la scheda Arduino/Genuino Uno.
Questo report potrebbe essere più ricco di informazioni abilitando l’opzione
“Mostra un output dettagliato durante la compilazione”
in “File -> Impostazioni”
non so davvero che cosa fare…. penso sia un problema della libreria
Autore
Ciao Nico,
l’errore lo riscontri nella medesima libreria che ho utilizzato e consigliato io?
Hai già letto sul sito dell’autore se esiste una patch ? Nel caso puoi scrivergli, magari mandargli anche una patch se riesci.
Buongiorno Mauro,
ho un problema con il settaggio dell’ora corrente.
Mi puoi dire come fare il settaggio della data e del l’ora?
Grazie mille.
Autore
Ciao Salvatore,
per impostare l’ora ho usato l’esempio descritto in questo articolo: https://www.mauroalfieri.it/elettronica/rtc-ds3231-per-arduino.html
[…] passato hai letto un articolo dedicato al DS3231 RTC Module prodotto in formato differente, più grande, e probabilmente avere un […]