#include <Wire.h>
#include <EEPROM.h>
#include <RTClib.h>
#include <LiquidCrystal.h>
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
RTC_DS1307 RTC;
const int buzzer = 3, next = 7, INC = 6, set_mad = 5;
int HOUR, MINUT, SECOND;
int hours1, minut, add = 11;
void setup() {
Wire.begin();
RTC.begin();
lcd.begin(16, 2);
pinMode(INC, INPUT);
pinMode(next, INPUT);
pinMode(set_mad, INPUT);
pinMode(buzzer, OUTPUT);
digitalWrite(next, HIGH); // Enable pull-up resistor
digitalWrite(set_mad, HIGH);
digitalWrite(INC, HIGH);
lcd.setCursor(0, 0);
lcd.print("Real Time Clock");
lcd.setCursor(0, 1);
lcd.print("Circuit Digest");
delay(2000);
if (!RTC.isrunning()) {
RTC.adjust(DateTime(__DATE__, __TIME__));
}
}
void loop() {
DateTime now = RTC.now();
if (digitalRead(set_mad) == 0) {
lcd.setCursor(0, 0);
lcd.print(" Set Alarm ");
delay(2000);
defualt();
time();
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Alarm time ");
lcd.setCursor(0, 1);
lcd.print(" has been set ");
delay(2000);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Time:");
lcd.setCursor(6, 0);
lcd.print(now.hour(), DEC);
lcd.print(":");
lcd.print(now.minute(), DEC);
lcd.print(":");
lcd.print(now.second(), DEC);
lcd.setCursor(0, 1);
lcd.print("Date: ");
lcd.print(now.day(), DEC);
lcd.print("/");
lcd.print(now.month(), DEC);
lcd.print("/");
lcd.print(now.year(), DEC);
match();
delay(200);
}
void defualt() {
lcd.setCursor(0, 1);
lcd.print(HOUR);
lcd.print(":");
lcd.print(MINUT);
lcd.print(":");
lcd.print(SECOND);
}
void time() {
int temp = 1;
while (temp == 1) {
if (digitalRead(INC) == 0) {
HOUR++;
if (HOUR == 24) {
HOUR = 0;
}
while (digitalRead(INC) == 0);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Set Alarm Time ");
lcd.setCursor(0, 1);
lcd.print(HOUR);
lcd.print(":");
lcd.print(MINUT);
lcd.print(":");
lcd.print(SECOND);
delay(100);
if (digitalRead(next) == 0) {
hours1 = HOUR;
EEPROM.write(add++, hours1);
temp = 2;
while (digitalRead(next) == 0);
}
}
while (temp == 2) {
if (digitalRead(INC) == 0) {
MINUT++;
if (MINUT == 60) {
MINUT = 0;
}
while (digitalRead(INC) == 0);
}
lcd.setCursor(0, 1);
lcd.print(HOUR);
lcd.print(":");
lcd.print(MINUT);
lcd.print(":");
lcd.print(SECOND);
delay(100);
if (digitalRead(next) == 0) {
minut = MINUT;
EEPROM.write(add++, minut);
temp = 0;
while (digitalRead(next) == 0);
}
}
delay(1000);
}
void match() {
int tem[17];
for (int i = 11; i < 17; i++) {
tem[i] = EEPROM.read(i);
}
if (HOUR == tem[11] && MINUT == tem[12]) {
beep();
beep();
beep();
beep();
lcd.clear();
lcd.print("Wake Up........");
lcd.setCursor(0, 1);
lcd.print("Wake Up.......");
beep();
beep();
beep();
beep();
}
}
void beep() {
digitalWrite(buzzer, HIGH);
delay(500);
digitalWrite(buzzer, LOW);
delay(500);
}