#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal.h>
RTC_DS1307 rtc;
// LCD pin bağlantıları
LiquidCrystal lcd(12, 10, 5, 4, 3, 2);
int alarmHour = 0;
int alarmMinute = 0;
bool alarmSet = false;
const int buzzerPin = 9; // Buzzer pini
// Gün isimleri dizisi
const char* daysOfWeek[] = {
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
};
int lastSecond = -1; // Saniye için kontrol değişkeni
void setup() {
Serial.begin(9600);
Wire.begin();
rtc.begin();
lcd.begin(16, 2);
pinMode(buzzerPin, OUTPUT);
// Alarm zamanını ayarla (örneğin 7:30)
alarmHour = 7;
alarmMinute = 30;
// RTC'nin çalıştığından emin ol
if (!rtc.isrunning()) {
Serial.println("RTC not running!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
DateTime now = rtc.now();
// Zamanı kontrol et ve LCD'yi güncelle
if (now.second() != lastSecond) {
lcd.clear(); // Ekranı temizle
lcd.setCursor(4, 0);
lcd.print(now.hour(), DEC);
lcd.print(':');
lcd.print(now.minute(), DEC);
lcd.print(':');
lcd.print(now.second(), DEC);
lastSecond = now.second(); // Son saniyeyi güncelle
// Tarihi ve günü yazdır
lcd.setCursor(1, 1);
lcd.print(now.day(), DEC); // Gün
lcd.print('/');
lcd.print(now.month(), DEC); // Ay
lcd.print('/');
lcd.print(now.year(), DEC); // Yıl
lcd.setCursor(12, 1);
lcd.print(daysOfWeek[now.dayOfTheWeek()]); // Gün adını yazdır
}
// Alarm kontrolü
if (alarmSet && now.hour() == alarmHour && now.minute() == alarmMinute) {
soundAlarm();
}
delay(100); // Kısa bir bekleme süresi
}
void soundAlarm() {
for (int i = 0; i < 5; i++) {
digitalWrite(buzzerPin, HIGH);
delay(500);
digitalWrite(buzzerPin, LOW);
delay(500);
}
// Alarmdan sonra alarmı kapat
alarmSet = false;
}