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

RTC + بازر روی D8 + دکمه روی D2 برای قطع زنگ.

سطح: چالشی ⭐⭐⭐ · مود: آردوینو (سه‌بعدی + کد)

قطعات لازم

کد کامل پروژه

// 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
}

چطور اجرایش کنم؟

  1. شبیه‌ساز تینکرکد فارسی را باز کن و «مود آردوینو» را انتخاب کن.
  2. از پنل «نمونه‌ها»، «ساعت زنگ‌دار» را بارگذاری کن — مدار و کد با هم می‌آیند.
  3. دکمه‌ی اجرا ▶ را بزن و خروجی Serial و رفتار قطعات را تماشا کن.
  4. حالا کد را تغییر بده — عددها، پین‌ها، ترتیب — و دوباره اجرا کن!
این پروژه را رایگان در شبیه‌ساز اجرا کن 🤖