Project Hub
Digital Clock with RTC
🕒

Digital Clock with RTC

Accurate clock using a DS3231 module on an LCD.

intermediate45 min

Components Needed

Arduino UNO
DS3231 RTC module
OLED
16×2 I2C LCD
CR2032 battery

Circuit Diagram & Wiring

Add your circuit diagram image here.

  1. RTC & LCD share I2C: SDA → A4, SCL → A5.
  2. VCC → 5V, GND → GND.

Arduino Sketch (.ino)

digital-clock.ino
<span style="color:#f97583">#includespan> &lt;Wire.h&gt;
<span style="color:#f97583">#includespan> &lt;RTClib.h&gt;
<span style="color:#f97583">#includespan> &lt;LiquidCrystal_I2C.h&gt;

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() &lt; <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() &lt; <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() &lt; <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() &lt; <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() &lt; <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>);
}