⏰ ماموریت ۸۰: ساعت زنگ‌دار

RTC روی I2C، بازر روی D8، دکمه روی D2 با INPUT_PULLUP. وقتی hour و minute برابر ساعت زنگ شد بوق بزن؛ دکمه خاموشش کنه.

سطح: چالشی ⭐⭐⭐ · مود: آردوینو — با کد

هدف‌ها

قطعه‌های لازم

▶ همین ماموریت را در شبیه‌ساز امتحان کن
💡 گیر کردی؟ داخل شبیه‌ساز راهنما را ببین، و اگر باز هم نشد دکمه‌ی «برام حلش کن» مدار را برایت می‌چیند تا ببینی چطور کار می‌کند.

جواب کامل

اول خودت امتحان کن! بعد جواب را ببین 👀

سیم‌کشی

  1. Arduino Uno (VCC5) ⟷ Real-Time Clock (DS3231) (VCC)
  2. Real-Time Clock (DS3231) (GND) ⟷ Arduino Uno (GND1)
  3. Arduino Uno (A4) ⟷ Real-Time Clock (DS3231) (SDA)
  4. Arduino Uno (A5) ⟷ Real-Time Clock (DS3231) (SCL)
  5. Arduino Uno (D8) ⟷ بازر زنگی (POS)
  6. بازر زنگی (NEG) ⟷ Arduino Uno (GND2)
  7. Arduino Uno (D2) ⟷ Push Button (PIN_A1)
  8. 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

🔋

ماموریت ۷۵: زمان شارژ خازن

🎲

ماموریت ۷۴: تاس الکترونیکی

📚 برای یاد گرفتن پایه‌ها سری به دوره‌ی آموزش آردوینو بزن · 🎯 همه‌ی ماموریت‌ها