⏰ ماموریت ۸۰: ساعت زنگدار
RTC روی I2C، بازر روی D8، دکمه روی D2 با INPUT_PULLUP. وقتی hour و minute برابر ساعت زنگ شد بوق بزن؛ دکمه خاموشش کنه.
سطح: چالشی ⭐⭐⭐ · مود: آردوینو — با کد
هدفها
- ☐ یه آردوینو روی صحنه باشه
- ☐ یه ماژول ساعت DS3231
- ☐ یه بازر
- ☐ یه دکمه
- ☐ ساعت و دقیقه مقایسه بشه
- ☐ دکمه با INPUT_PULLUP
- ☐ شبیهسازی در حال اجرا
قطعههای لازم
- Arduino Uno
- Real-Time Clock (DS3231)
- بازر زنگی
- کلید فشاری
💡 گیر کردی؟ داخل شبیهساز راهنما را ببین، و اگر باز هم نشد دکمهی «برام حلش کن» مدار را برایت میچیند تا ببینی چطور کار میکند.
جواب کامل
اول خودت امتحان کن! بعد جواب را ببین 👀
سیمکشی
- Arduino Uno (VCC5) ⟷ Real-Time Clock (DS3231) (VCC)
- Real-Time Clock (DS3231) (GND) ⟷ Arduino Uno (GND1)
- Arduino Uno (A4) ⟷ Real-Time Clock (DS3231) (SDA)
- Arduino Uno (A5) ⟷ Real-Time Clock (DS3231) (SCL)
- Arduino Uno (D8) ⟷ بازر زنگی (POS)
- بازر زنگی (NEG) ⟷ Arduino Uno (GND2)
- Arduino Uno (D2) ⟷ Push Button (PIN_A1)
- Push Button (PIN_A2) ⟷ Arduino Uno (GND2)
کد
// Alarm clock: buzzer at 07:00, the button stops it
#include <Wire.h>
#include <RTClib.h>
RTC_DS3231 rtc;
const int BUZZER = 8;
const int BUTTON = 2;
const int ALARM_H = 7;
const int ALARM_M = 0;
bool ringing = false;
bool doneToday = false;
void setup() {
Serial.begin(9600);
pinMode(BUZZER, OUTPUT);
pinMode(BUTTON, INPUT_PULLUP);
rtc.begin();
rtc.adjust(DateTime(2026, 10, 14, 6, 59, 50)); // 10 s before the alarm, to test
}
void loop() {
DateTime now = rtc.now();
if (now.hour() == ALARM_H && now.minute() == ALARM_M && !doneToday) {
ringing = true;
doneToday = true;
Serial.println("Wake up!");
}
if (now.hour() == 0) doneToday = false; // a new day
if (digitalRead(BUTTON) == LOW) ringing = false; // pressed = stop
if (ringing) {
digitalWrite(BUZZER, (millis() / 250) % 2); // beep-beep
} else {
digitalWrite(BUZZER, LOW);
}
delay(20);
}
ماموریتهای مشابه
📜
ماموریت ۸۲: متن متحرک روی ماتریس
🚪
ماموریت ۸۴: در هوشمند با کارت RFID
🔋
ماموریت ۷۵: زمان شارژ خازن
🎲
ماموریت ۷۴: تاس الکترونیکی
📚 برای یاد گرفتن پایهها سری به دورهی آموزش آردوینو بزن · 🎯 همهی ماموریتها