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

RTC + بازر + دکمه: ساعتی که سر وقت زنگ می‌زند و با یک فشار ساکت می‌شود.

سطح: پیشرفته · زمان: حدود 20 دقیقه · مفاهیم: RTC، بازر، ماشین حالت

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

  1. یک زنگ چه چیزهایی لازم دارد؟
  2. قدم ۱ — مدار
  3. قدم ۲ — مقایسه‌ی ساعت و دقیقه
  4. اشتباه رایج: فقط دقیقه را مقایسه کردن
  5. چالش: چُرت (Snooze)

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

// Alarm clock: RTC + buzzer (D8) + button (D2 to GND).
// The alarm is set to one minute from now so you can hear it soon.
#include <Wire.h>
#include <RTClib.h>

RTC_DS3231 rtc;
const int BUZZER = 8, BUTTON = 2;
int alarmHour, alarmMinute;
bool ringing = false;
bool doneToday = false;

void setup() {
  Serial.begin(9600);
  pinMode(BUZZER, OUTPUT);
  pinMode(BUTTON, INPUT_PULLUP);
  rtc.begin();
  DateTime now = rtc.now();
  alarmHour = now.hour();
  alarmMinute = now.minute() + 1;
  if (alarmMinute == 60) { alarmMinute = 0; alarmHour = (alarmHour + 1) % 24; }
  Serial.print("Alarm set for ");
  Serial.print(alarmHour); Serial.print(":"); Serial.println(alarmMinute);
}

void loop() {
  DateTime now = rtc.now();
  // compare hour AND minute - the minute alone would ring every hour
  if (!doneToday && now.hour() == alarmHour && now.minute() == alarmMinute) {
    if (!ringing) Serial.println("Wake up!");
    ringing = true;
  }
  if (ringing) {
    digitalWrite(BUZZER, millis() % 500 < 250 ? HIGH : LOW);   // beep-beep, no delay
    if (digitalRead(BUTTON) == LOW) {             // pressed = LOW (pull-up)
      ringing = false;
      doneToday = true;
      digitalWrite(BUZZER, LOW);
      Serial.println("Alarm stopped. Good morning!");
    }
  }
  if (now.hour() == 0 && now.minute() == 0) doneToday = false;   // new day
}

چرا این درس؟

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

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

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

🕰️

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

🙂

درس 76: ماتریس LED ۸×۸