#include <Wire.h>
#include "LiquidCrystal_I2C.h"
#include <RTClib.h>
#include <Button.h>
RTC_DS1307 rtc;
LiquidCrystal_I2C lcd(0x27, 16, 2);
Button buttonJam(11);
Button buttonMenit(10);
int OnOffAlarm = 12;
// Button Toggle Variable
unsigned long debounceDelay = 50;
unsigned long lastTimeButtonStateChanged = 0;
byte lastButtonState = LOW;
bool isOn = false;
// End of Button Toggle Variable
//=================
int jam = 0;
int menit = 0;
int buzzer = 7;
// ==================
void print2digits(int number) {
if (number >= 0 && number <10) {
lcd.print('0');
}
lcd.print(number);
}
//====================
void jam23() {
if(jam > 23){
jam = 0;
}
}
void menit59(){
if(menit > 59){
menit = 0;
}
}
//===================
//===================
void tekanJam(){
if(buttonJam.read() == Button::PRESSED){
jam++;
jam23();
}
}
void tekanMenit(){
if(buttonMenit.read() == Button::PRESSED){
menit++;
menit59();
}
}
//=====================
//======================
void lcdJam() {
if(jam > 9){
lcd.setCursor(8,1);
lcd.print(jam);
} else if (jam <= 9){
lcd.setCursor(8,1);
lcd.print(0);
lcd.print(jam);
}
}
void lcdMenit(){
if(menit > 9){
lcd.setCursor(11,1);
lcd.print(menit);
} else if (menit <= 9){
lcd.setCursor(11,1);
lcd.print(0);
lcd.print(menit);
}
}
//=======================
void setup() {
Serial.begin(9600);
Wire.begin();
buttonJam.begin();
buttonMenit.begin();
pinMode(OnOffAlarm, INPUT_PULLUP);
pinMode(buzzer, OUTPUT);
if (! rtc.begin())
{
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
lcd.init();
lcd.backlight();
lcd.print("yes");
}
void loop() {
DateTime now = rtc.now();
tekanJam();
lcdJam();
lcd.print(":");
tekanMenit();
lcdMenit();
lcd.setCursor(0,0);
print2digits(now.hour());
lcd.print(":");
print2digits(now.minute());
lcd.print(":");
print2digits(now.second());
lcd.setCursor(0,1);
lcd.print("Alarm : ");
// On Off Alarm
unsigned long timeNow = millis();
if (timeNow - lastTimeButtonStateChanged > debounceDelay) {
byte buttonState = digitalRead(OnOffAlarm);
if (buttonState != lastButtonState) {
lastTimeButtonStateChanged = timeNow;
lastButtonState = buttonState;
if (buttonState == LOW) { // button di tekan
isOn = ! isOn;
}
}
}
if(isOn) {
lcd.setCursor(13,0);
lcd.print(" ");
lcd.setCursor(11,0);
lcd.print("ON");
if ( now.hour() == jam && now.minute() == menit) {
tone(buzzer, 2100);
} else if (now.hour() != jam || now.minute() != menit) {
noTone(buzzer);
}
} else {
lcd.setCursor(11,0);
lcd.print("OFF");
noTone(buzzer);
}
delay(500);
}