#include<RTClib.h>
#include<LiquidCrystal.h>
RTC_DS1307 rtc;
LiquidCrystal lcd(12,11,7,6,5,4);
const int Button1 = 8;
const int Button2 = 9;
const int Button3 = 10;
const int Button4 = 3;
const int SPK = 13;
int mode = 0;
unsigned long Time, TimeCurrent = 0;
int SetHour = 0, SetMinute = 0, SetSecond = 0;
void setup()
{
if(! rtc.begin())
{
Serial.flush();
while(1) delay(10);
}
if(! rtc.isrunning())
{
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
lcd.begin(16,2);
pinMode(Button1,INPUT_PULLUP);
pinMode(Button2,INPUT_PULLUP);
pinMode(Button3,INPUT_PULLUP);
pinMode(Button4,INPUT_PULLUP);
pinMode(SPK,OUTPUT);
Serial.begin(9600);
}
void InputMode()
{
if(digitalRead(Button1) == LOW)
{
delay(20);
if(digitalRead(Button1) == LOW)
{
mode++;
lcd.clear();
if(mode > 3)
{
mode = 0;
}
}
while(digitalRead(Button1) == LOW);
}
}
void PrintTime(int Time, int d1, int d2, int line)
{
if(Time < 10)
{
lcd.setCursor(d1,line);
lcd.print("0");
lcd.setCursor(d2,line);
lcd.print(Time);
}
else
{
lcd.setCursor(d1,line);
lcd.print(Time);
}
}
void loop()
{
InputMode();
Serial.println(mode);
DateTime Now = rtc.now();
if(mode == 0)
{
lcd.setCursor(5,0);
lcd.print("R-HUST");
InputMode();
}
if(mode == 1)
{
lcd.setCursor(2,0);
lcd.print("CAO XUAN DUC");
lcd.setCursor(1,1);
lcd.print("MSSV 20216089");
InputMode();
}
if(mode == 2)
{
lcd.setCursor(0,0);
lcd.print("TIME:");
PrintTime(Now.hour(),6,7,0);
lcd.setCursor(8,0);
lcd.print(":");
PrintTime(Now.minute(),9,10,0);
lcd.setCursor(11,0);
lcd.print(":");
PrintTime(Now.second(),12,13,0);
lcd.setCursor(0,1);
lcd.print("DATE:");
PrintTime(Now.day(),6,7,1);
lcd.setCursor(8,1);
lcd.print("/");
PrintTime(Now.month(),9,10,1);
lcd.setCursor(11,1);
lcd.print("/");
PrintTime(Now.year(),12,13,1);
InputMode();
}
if(mode == 3)
{
lcd.setCursor(1,0);
lcd.print("Set Alarm Clock:");
PrintTime(SetHour,4,5,1);
lcd.setCursor(6,1);
lcd.print(":");
PrintTime(SetMinute,7,8,1);
lcd.setCursor(9,1);
lcd.print(":");
PrintTime(SetSecond,10,11,1);
if(digitalRead(Button2) == LOW)
{
delay(20);
if(digitalRead(Button2) == LOW)
{
SetHour++;
delay(20);
if(SetHour == 24) SetHour = 0;
}
while(digitalRead(Button2) == LOW);
}
if(digitalRead(Button3) == LOW)
{
delay(20);
if(digitalRead(Button3) == LOW)
{
SetMinute++;
delay(20);
if(SetMinute == 60) SetMinute = 0;
}
while(digitalRead(Button3) == LOW);
}
if(digitalRead(Button4) == LOW)
{
delay(20);
if(digitalRead(Button4) == LOW)
{
SetSecond++;
if(SetSecond == 60) SetSecond = 0;
}
while(digitalRead(Button4) == LOW);
}
InputMode();
}
if(SetHour == Now.hour() && SetMinute == Now.minute())
{
if(SetSecond == Now.second())
{
digitalWrite(SPK,HIGH);
tone(SPK,4000,3000);
}
}
}