RTC DS3231 sketch test

L’articolo RTC DS3231per arduino hai letto come impostare l’ora sul RTC DS3231 attraverso il monitor seriale.

RTC DS3231 arduino connesso

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:

RTC DS3231 arduino pin

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;

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/rtc-ds3231-sketch-test.html

14 pings

Skip to comment form

  1. […] passato hai letto un articolo dedicato al DS3231 RTC Module prodotto in formato differente, più grande, e probabilmente avere un […]

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.