Project Hub

🕒
Digital Clock with RTC
Accurate clock using a DS3231 module on an LCD.
intermediate45 min
Components Needed
Arduino UNO
DS3231 RTC module
16×2 I2C LCD
CR2032 battery
Circuit Diagram & Wiring
Add your circuit diagram image here.
- RTC & LCD share I2C: SDA → A4, SCL → A5.
- VCC → 5V, GND → GND.
Arduino Sketch (.ino)
digital-clock.ino
<span style="color:#f97583">#includespan> <Wire.h>
<span style="color:#f97583">#includespan> <RTClib.h>
<span style="color:#f97583">#includespan> <LiquidCrystal_I2C.h>
RTC_DS3231 rtc;
LiquidCrystal_I2C lcd(0x27, <span style="color:#79b8ff">16span>, <span style="color:#79b8ff">2span>);
void setup() {
lcd.init(); lcd.backlight();
rtc.begin();
<span style="color:<span style="color:#f97583">#6a737dspan>;font-style:italic">// rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // run oncespan>
}
void loop() {
DateTime now = rtc.now();
lcd.setCursor(<span style="color:#79b8ff">0span>, <span style="color:#79b8ff">0span>);
lcd.print(now.year()); lcd.print(&<span style="color:#f97583">#<span style="color:#79b8ff">39span>span>;-&<span style="color:#f97583">#<span style="color:#79b8ff">39span>span>;);
if (now.month() < <span style="color:#79b8ff">10span>) lcd.print(&<span style="color:#f97583">#<span style="color:#79b8ff">39span>span>;<span style="color:#79b8ff">0span>&<span style="color:#f97583">#<span style="color:#79b8ff">39span>span>;); lcd.print(now.month()); lcd.print(&<span style="color:#f97583">#<span style="color:#79b8ff">39span>span>;-&<span style="color:#f97583">#<span style="color:#79b8ff">39span>span>;);
if (now.day() < <span style="color:#79b8ff">10span>) lcd.print(&<span style="color:#f97583">#<span style="color:#79b8ff">39span>span>;<span style="color:#79b8ff">0span>&<span style="color:#f97583">#<span style="color:#79b8ff">39span>span>;); lcd.print(now.day());
lcd.setCursor(<span style="color:#79b8ff">4span>, <span style="color:#79b8ff">1span>);
if (now.hour() < <span style="color:#79b8ff">10span>) lcd.print(&<span style="color:#f97583">#<span style="color:#79b8ff">39span>span>;<span style="color:#79b8ff">0span>&<span style="color:#f97583">#<span style="color:#79b8ff">39span>span>;); lcd.print(now.hour()); lcd.print(&<span style="color:#f97583">#<span style="color:#79b8ff">39span>span>;:&<span style="color:#f97583">#<span style="color:#79b8ff">39span>span>;);
if (now.minute() < <span style="color:#79b8ff">10span>) lcd.print(&<span style="color:#f97583">#<span style="color:#79b8ff">39span>span>;<span style="color:#79b8ff">0span>&<span style="color:#f97583">#<span style="color:#79b8ff">39span>span>;); lcd.print(now.minute()); lcd.print(&<span style="color:#f97583">#<span style="color:#79b8ff">39span>span>;:&<span style="color:#f97583">#<span style="color:#79b8ff">39span>span>;);
if (now.second() < <span style="color:#79b8ff">10span>) lcd.print(&<span style="color:#f97583">#<span style="color:#79b8ff">39span>span>;<span style="color:#79b8ff">0span>&<span style="color:#f97583">#<span style="color:#79b8ff">39span>span>;); lcd.print(now.second());
delay(<span style="color:#79b8ff">500span>);
}