🕰️ درس 74: ساعت واقعی با RTC DS3231
ساعتی که با قطع برق هم وقت را گم نمیکند — و چرا millis برای ساعت کافی نیست.
سطح: متوسط · زمان: حدود 18 دقیقه · مفاهیم: RTC، I2C، RTClib
قدمهای این درس
- چرا millis ساعت خوبی نیست؟
- قدم ۱ — RTC روی I2C
- قدم ۲ — تنظیم و خواندن زمان
- اشتباه رایج: adjust در هر بار روشن شدن
- چالش: ساعت رومیزی
نمونهای از کد این درس
// 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());
}
چرا این درس؟
دورهی تینکرکد فارسی تعاملی است: هر قدم را خودت داخل شبیهساز انجام میدهی — مدار واقعی میچینی، کد واقعی اجرا میکنی و نتیجه را همان لحظه میبینی. این درس روی درسهای قبلی ساخته شده، پس اگر تازه شروع کردهای از درس ۱ بیا!
این درس را رایگان در شبیهساز شروع کن 🎓