//libraries

include

include

include

include

// Display
LiquidCrystal lcd(6,7,2,3,4,5); RTC_DS1307 RTC; Servo myservo;

//Buttons int P1 = 9;//Set menu int P2 = 8;// + int P3 = 12;// - int P4 = 11;// switch alarm

//Alarm

define LED 13

define buzzer 10

//variables int hourupg; int minupg; int yearupg; int monthupg; int dayupg; int menu =0; int setAll =0; int p = 0;

// Holds the current alarm time uint8_t alarmHours = 0, alarmMinutes = 0;

void setup() {

lcd.begin(16,2); lcd.clear();

Serial.begin(9600);

pinMode(P1,INPUT_PULLUP); pinMode(P2,INPUT_PULLUP); pinMode(P3,INPUT_PULLUP); pinMode(P4,INPUT_PULLUP); pinMode(LED,OUTPUT); pinMode(buzzer, OUTPUT); // Set buzzer as an output printAllOff(); Serial.begin(9600); Wire.begin(); RTC.begin(); myservo.attach(0); moveServo();

if (! RTC.isrunning()) { Serial.println("RTC is NOT running!"); // Set the date and time at compile time RTC.adjust(DateTime(DATE, TIME)); } int menu=0;

}

void loop() { DateTime now = RTC.now(); // check if you press the SET button and increase the menu index if(digitalRead(P1)== LOW) { menu=menu+1; } if((digitalRead(P2)== LOW)&&(digitalRead(P3)== LOW))
{

DisplaySetHourAll();
DisplaySetMinuteAll();
lcd.clear();
lcd.setCursor(5,0);
lcd.print("ALARM");
lcd.setCursor(5,1);
lcd.print(alarmHours, DEC);
lcd.print(":");
lcd.print(alarmMinutes, DEC);
delay(1000);
lcd.clear();

} // in which subroutine should we go? if (menu==0) { DisplayDateTime(); // void DisplayDateTime Alarm(); // Alarm control } if (menu==1) { DisplaySetHour(); } if (menu==2) { DisplaySetMinute(); } if (menu==3) { DisplaySetYear(); } if (menu==4) { DisplaySetMonth(); } if (menu==5) { DisplaySetDay(); } if (menu==6) { StoreAgg(); delay(500); menu=0; } delay(100);

}

void DisplayDateTime () { // We show the current date and time DateTime now = RTC.now(); delay(1);

lcd.setCursor(0, 0); //lcd.print("Hour : ");

if (now.hour()<=9) { lcd.print("0"); } lcd.print(now.hour(), DEC); hourupg=now.hour(); lcd.print(":"); if (now.minute()<=9) { lcd.print("0"); } lcd.print(now.minute(), DEC); minupg=now.minute(); lcd.print(" "); /*lcd.print(":"); if (now.second()<=9) { lcd.print("0"); } lcd.print(now.second(), DEC); */

lcd.setCursor(7,0); //lcd.print("Date : "); if (now.day()<=9) { lcd.print("0"); } lcd.print(now.day(), DEC); dayupg=now.day(); lcd.print("/"); if (now.month()<=9) { lcd.print("0"); } lcd.print(now.month(), DEC); monthupg=now.month(); lcd.print("/"); yearupg=now.year(); if(now.year()%100<=9){ lcd.print(0,DEC); lcd.print(now.year()%100, DEC); } else{ lcd.print(now.year()%100, DEC); }

char DOW[][6]={"Sun ","Mon ","Tue ","Wed ","Thur ","Fri ","Sat "}; lcd.setCursor(0, 1); //lcd.print("Day : "); lcd.print(DOW[now.dayOfTheWeek()]); }

void DisplaySetHour() { // time setting lcd.clear(); DateTime now = RTC.now(); if(digitalRead(P2)==LOW) { if(hourupg==23) { hourupg=0; } else { hourupg=hourupg+1; } } if(digitalRead(P3)==LOW) { if(hourupg==0) { hourupg=23; } else { hourupg=hourupg-1; } } lcd.setCursor(0,0); lcd.print("Set time:"); lcd.setCursor(0,1); lcd.print(hourupg,DEC); delay(200); }

void DisplaySetMinute() { // Setting the minutes lcd.clear(); if(digitalRead(P2)==LOW) { if (minupg==59) { minupg=0; } else { minupg=minupg+1; } } if(digitalRead(P3)==LOW) { if (minupg==0) { minupg=59; } else { minupg=minupg-1; } } lcd.setCursor(0,0); lcd.print("Set Minutes:"); lcd.setCursor(0,1); lcd.print(minupg,DEC); delay(200); }

void DisplaySetYear() { // setting the year lcd.clear(); if(digitalRead(P2)==LOW) {
yearupg=yearupg+1; } if(digitalRead(P3)==LOW) { yearupg=yearupg-1; } lcd.setCursor(0,0); lcd.print("Set Year:"); lcd.setCursor(0,1); lcd.print(yearupg,DEC); delay(200); }

void DisplaySetMonth() { // Setting the month lcd.clear(); if(digitalRead(P2)==LOW) { if (monthupg==12) { monthupg=1; } else { monthupg=monthupg+1; } } if(digitalRead(P3)==LOW) { if (monthupg==1) { monthupg=12; } else { monthupg=monthupg-1; } } lcd.setCursor(0,0); lcd.print("Set Month:"); lcd.setCursor(0,1); lcd.print(monthupg,DEC); delay(200); }

void DisplaySetDay() { // Setting the day lcd.clear(); if(digitalRead(P2)==LOW) { if (dayupg==31) { dayupg=1; } else { dayupg=dayupg+1; } } if(digitalRead(P3)==LOW) { if (dayupg==1) { dayupg=31; } else { dayupg=dayupg-1; } } lcd.setCursor(0,0); lcd.print("Set Day:"); lcd.setCursor(0,1); lcd.print(dayupg,DEC); delay(200); }

void StoreAgg() { // Variable saving lcd.clear(); lcd.setCursor(0,0); lcd.print("SAVING IN"); lcd.setCursor(0,1); lcd.print("PROGRESS"); RTC.adjust(DateTime(yearupg,monthupg,dayupg,hourupg,minupg,0)); delay(200); }

void DisplaySetHourAll()// Setting the alarm hour { while(digitalRead(P1)==HIGH){

lcd.clear();

if(digitalRead(P2)==LOW) { if(alarmHours==23) { alarmHours=0; } else { alarmHours=alarmHours+1; } } if(digitalRead(P3)==LOW) { if(alarmHours==0) { alarmHours=23; } else { alarmHours=alarmHours-1; } } lcd.setCursor(0,0); lcd.print("Set HOUR Alarm:"); lcd.setCursor(0,1); lcd.print(alarmHours,DEC); delay(200); } delay(200); }

void DisplaySetMinuteAll()// Setting the alarm minutes { while(digitalRead(P1)==HIGH){

lcd.clear(); if(digitalRead(P2)==LOW) { if (alarmMinutes==59) { alarmMinutes=0; } else { alarmMinutes=alarmMinutes+1; } } if(digitalRead(P3)==LOW) { if (alarmMinutes==0) { alarmMinutes=59; } else { alarmMinutes=alarmMinutes-1; } } lcd.setCursor(0,0); lcd.print("Set MIN. Alarm:"); lcd.setCursor(0,1); lcd.print(alarmMinutes,DEC); delay(200); } delay(200); }

void printAllOn(){ lcd.setCursor(5,1); lcd.print("Alarm ");

if (alarmHours <= 9) { lcd.print("0"); } lcd.print(alarmHours, DEC);

lcd.print(":"); if (alarmMinutes <= 9) { lcd.print("0"); } lcd.print(alarmMinutes, DEC);

}

void printAllOff() { lcd.setCursor(5,1); lcd.print("Alarm: Off ");
}

void moveServo() { for(p = 0; p < 180; p += 1) // goes from 0 degrees to 180 degrees { // in steps of 1 degree myservo.write(p); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position } for(p = 180; p>=1; p-=1) // goes from 180 degrees to 0 degrees {
myservo.write(p); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position } }

void Alarm(){ if(digitalRead(P4)== LOW) { setAll=setAll+1; } if (setAll==0) { printAllOff(); noTone (buzzer); digitalWrite(LED,LOW); } else if (setAll==1) {

 printAllOn();    

 DateTime now = RTC.now();


    if ( now.hour() == alarmHours && now.minute() == alarmMinutes )
    {
     DateTime now = RTC.now();

     digitalWrite(LED,HIGH);

     moveServo();

     tone(buzzer,880); //play the note "A5" (LA5)
     delay (300);
     tone(buzzer,698); //play the note "F6" (F
     delay (300);






    }
    else{
     noTone (buzzer);
     digitalWrite(LED,LOW);





     } 
}
 if (setAll==2)
    {
     setAll=0;
    }
delay(100);

}

Built With

Share this project:

Updates