#include <RTClib.h> //Library for enabling real-time
#include <TimeLib.h>
#include <Wire.h> //Library for communication with real-time module (DS1307)
#include <LiquidCrystal.h> //LCD Display
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
RTC_DS1307 rtc; //Real-time value from DS1307
#define buz 11 //PWM Digital Port for buzzer alarm functionality
int Hor; //Current hour value for buzzer alarm
int Min; //Current minute value for buzzer alarm
int Sec; //Current second value for buzzer alarm
const float BETA = 3950; //BETA Coefficient for the thermisor (temperature sensor)
void setup() {
Wire.begin(); //Wire library for connecting to real-time module
rtc.begin(); //Value for real-time
Serial.begin(9600);
pinMode(buz, OUTPUT); //Buzzer output
lcd.begin(20,4); //20 character by 4 lines on LCD
lcd.setCursor(0,0);
lcd.print("IoT Alarm Clock"); //Introductary text to turning on alarm clock
lcd.setCursor(0,1);
lcd.print("Loading..."); //Loading text for line below
delay(2000); //Takes 2000ms to load
lcd.clear(); //Clears screen after 2000ms to load the alarm clock screen
}
void loop() {
int analogValue = analogRead(A3); //Analog input for temperature sensor
float celsius = 1 / (log(1 / (1023. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15; //Calculate celsius from the current BETA coefficent
String temp = (String) celsius; //Put celcsius in temp string
DateTime current = rtc.now(); //Put current time in "current" value
Hor = current.hour(); //Current scheduled hour for buzzer alarm
Min = current.minute(); //Current scheduled minute for buzzer alarm
Sec = current.second(); //Current scheduled second for buzzer alarm
lcd.setCursor(0,0); //Prints current time (Hour : Minute: Second) on first line
lcd.print("Time: ");
lcd.print(current.hour(), DEC);
lcd.print(":");
lcd.print(current.minute(), DEC);
lcd.print(":");
lcd.print(current.second(), DEC);
lcd.setCursor(0,1); //Prints current date on the second line (Day : Month: Year)
lcd.print("Date: ");
lcd.print(current.day(), DEC);
lcd.print("-");
lcd.print(current.month(), DEC);
lcd.print("-");
lcd.print(current.year(), DEC);
lcd.setCursor(0,2);
lcd.print("Temp: "); //Print current temperature from temp string value
lcd.print(temp);
lcd.print(" Celcius");
if( Hor == 16 && (Min == 11 || Min == 12)) { //Manual hour and minute set for alarm buzzer
BuzzerAlarm(); //Function rings the alarm once
BuzzerAlarm();
lcd.clear();
lcd.print("Alarm Time");
lcd.setCursor(0,1);
lcd.print("Alarm in motion!");
BuzzerAlarm();
BuzzerAlarm();
}
delay(1000);
}
void BuzzerAlarm() {
digitalWrite(buz,HIGH); //Rings alarm
delay(500);
digitalWrite(buz, LOW); //Dims alarm after 500ms
delay(500);
}