#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "ezButton.h"
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Button Pins
const int sig = 13; // LED
//EzButton
ezButton OR(2);
ezButton mode(3);
ezButton enter(4);
ezButton right(5);
ezButton down(6);
ezButton up(7);
ezButton left(8);
// Variables
int menu = 0;
int MasterState = 0;
//Alarm variables
int ahour, amin = 0;
int hourON, tensON, minON, hourOFF, tensOFF, minOFF = 0;
//Set Up
void setup()
{
// lcd initialization
lcd.init(); //initialize the lcd
lcd.backlight(); //open the backlight
// Button initialization
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(7, INPUT);
pinMode(8, INPUT);
// Output init
pinMode(sig, OUTPUT);
//EzButton
OR.setDebounceTime(50);
mode.setDebounceTime(50);
enter.setDebounceTime(50);
right.setDebounceTime(50);
down.setDebounceTime(50);
up.setDebounceTime(50);
left.setDebounceTime(50);
}
//Main
void loop() {
OR.loop();
mode.loop();
enter.loop();
right.loop();
down.loop();
up.loop();
left.loop();
//Main States
switch (MasterState)
{
case 0: //IDLE
{
//Menu Selection
// When Button 2 (MODE) is pressed, menu counter increments by 1
if (mode.isPressed())
{
menu++;
if (menu > 3)
{
menu = 0;
}
}
// Display the menu on LCD screen
switch (menu)
{
case 0: //IDLE (This state can be removed later bc this switch-case is in IDLE)
{
lcd.setCursor(0, 0);
lcd.print("Current: IDLE ");
break;
}
case 1: //CLOCK INPUT
{
lcd.setCursor(0, 0);
lcd.print("Current: CLOCK ");
break;
}
case 2: //ALARM INPUT
{
lcd.setCursor(0, 0);
lcd.print("Current: ALARM ");
//EzButton
if (enter.isPressed())
{
lcd.clear(); //Clear the screen
MasterState = 2;
}
break;
}
case 3: //RUN TIMER
{
lcd.setCursor(0, 0);
lcd.print("Current: RUN ");
break;
}
}
break;
}
case 2: //ALARM SETUP
{
//If button 7 (Left) is pressed increment ahour by 1
if (left.isPressed())
{
ahour++;
}
//If button 4 (Right) is pressed increment amin by 1
if (right.isPressed())
{
amin++;
}
//Hour will reset to 0 after reaching 24 & minute reset to 0 after reaching 60
if (amin > 59)
{
amin = 0;
ahour++;
}
if (ahour > 23)
{
ahour = 0;
}
if (ahour < 10 && amin < 10)
{
lcd.setCursor(7, 1);
lcd.print("0"); lcd.print(ahour);
lcd.print(":");
lcd.print("0"); lcd.print(amin);
}
else if (ahour > 9 && amin < 10)
{
lcd.setCursor(7, 1);
lcd.print(ahour);
lcd.print(":");
lcd.print("0"); lcd.print(amin);
}
else if (ahour < 10 && amin > 9)
{
lcd.setCursor(7, 1);
lcd.print("0"); lcd.print(ahour);
lcd.print(":");
lcd.print(amin);
}
else
{
lcd.setCursor(7, 1);
lcd.print(ahour); lcd.print(":"); lcd.print(amin);
}
lcd.setCursor(0, 0);
lcd.print("ALARM SETUP: ");
lcd.setCursor(0, 2);
lcd.print("MODE to Confirm");
//Confirmed
if (mode.isPressed())
{
lcd.clear();
MasterState = 0; //return to IDLE
menu = 0;
}
break;
}
}
}