🕰️ درس 74: ساعت واقعی با RTC DS3231

ساعتی که با قطع برق هم وقت را گم نمی‌کند — و چرا millis برای ساعت کافی نیست.

سطح: متوسط · زمان: حدود 18 دقیقه · مفاهیم: RTC، I2C، RTClib

قدم‌های این درس

  1. چرا millis ساعت خوبی نیست؟
  2. قدم ۱ — RTC روی I2C
  3. قدم ۲ — تنظیم و خواندن زمان
  4. اشتباه رایج: adjust در هر بار روشن شدن
  5. چالش: ساعت رومیزی

نمونه‌ای از کد این درس

// DS3231 real-time clock: set it once, then read the time every second.
#include <Wire.h>
#include <RTClib.h>

RTC_DS3231 rtc;
int lastSecond = -1;

void print2(int n) {            // 7 -> "07"
  if (n < 10) Serial.print("0");
  Serial.print(n);
}

void setup() {
  Serial.begin(9600);
  if (!rtc.begin()) {
    Serial.println("RTC not found!");
    while (true) delay(1000);
  }
  if (rtc.lostPower()) {        // battery was out: set the time from the computer
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    Serial.println("Time was set.");
  }
}

void loop() {
  DateTime now = rtc.now();
  if (now.second() == lastSecond) return;   // print once per second
  lastSecond = now.second();

  Serial.print(now.year()); Serial.print("/");
  print2(now.month()); Serial.print("/");
  print2(now.day()); Serial.print("  ");
  print2(now.hour()); Serial.print(":");
  print2(now.minute()); Serial.print(":");
  print2(now.second());
  Serial.print("   millis: ");
  Serial.println(millis());
}

چرا این درس؟

دوره‌ی تینکرکد فارسی تعاملی است: هر قدم را خودت داخل شبیه‌ساز انجام می‌دهی — مدار واقعی می‌چینی، کد واقعی اجرا می‌کنی و نتیجه را همان لحظه می‌بینی. این درس روی درس‌های قبلی ساخته شده، پس اگر تازه شروع کرده‌ای از درس ۱ بیا!

این درس را رایگان در شبیه‌ساز شروع کن 🎓

درس‌های دیگر دوره

🌡️

درس 73: دما و رطوبت با DHT

⏰

درس 75: ساعت زنگ‌دار