⏰ ساعت زنگدار
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
}
چطور اجرایش کنم؟
- شبیهساز تینکرکد فارسی را باز کن و «مود آردوینو» را انتخاب کن.
- از پنل «نمونهها»، «ساعت زنگدار» را بارگذاری کن — مدار و کد با هم میآیند.
- دکمهی اجرا ▶ را بزن و خروجی Serial و رفتار قطعات را تماشا کن.
- حالا کد را تغییر بده — عددها، پینها، ترتیب — و دوباره اجرا کن!