#include <LiquidCrystal.h>
#include <Keypad.h>
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keys[ROWS][COLS] = {
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
byte rowPins[ROWS] = { 5, 4, 3, 2 }; //connect to the row pinouts of the keypad
byte colPins[COLS] = { 9, 8, 7, 6 }; //connect to the column pinouts of the keypad
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int buttonState = 0;
int buttonState2 = 0;
int buttonState3 = 0;
int buttonPin = A0;
int buttonPin2 = A1;
int buttonPin3 = A2;
int hour = 0;
int minute = 0;
int second = 0;
int alarmHour = 0;
int alarmMinute = 0;
int alarmSecond = 0;
int alarmStatus = 0; //0 = off, 1 = on
int mode = 0; //0 = normal, 1 = set clock, 2 = set alarm
int selection = 0; //0 = hour, 1 = minute, 2 = second, 3 = alarm status
void setup() {
lcd.begin(16, 2);
pinMode(buttonPin, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(buttonPin3, INPUT);
}
void loop() {
buttonState = digitalRead(buttonPin);
buttonState2 = digitalRead(buttonPin2);
buttonState3 = digitalRead(buttonPin3);
char key = keypad.getKey();
if (key) {
if (key == 'A') {
mode++;
if (mode > 2) {
mode = 0;
}
}
if (key == 'B') {
selection++;
if (selection > 3) {
selection = 0;
}
}
if (key == 'C') {
if (mode == 1) {
if (selection == 0) {
hour++;
if (hour > 23) {
hour = 0;
}
}
if (selection == 1) {
minute++;
if (minute > 59) {
minute = 0;
}
}
if (selection == 2) {
second++;
if (second > 59) {
second = 0;
}
}
if (selection == 3) {
alarmStatus = !alarmStatus;
}
}
if (mode == 2) {
if (selection == 0) {
alarmHour++;
if (alarmHour > 23) {
alarmHour = 0;
}
if (selection == 1) {
alarmMinute++;
if (alarmMinute > 59) {
alarmMinute = 0;
}
}
if (selection == 2) {
alarmSecond++;
if (alarmSecond > 59) {
alarmSecond = 0;
}
}
if (selection == 3) {
alarmStatus = !alarmStatus;
}
}
}
if (key == 'D') {
if (mode == 1) {
if (selection == 0) {
hour--;
if (hour < 0) {
hour = 23;
}
}
if (selection == 1) {
minute--;
if (minute < 0) {
minute = 59;
}
}
if (selection == 2) {
second--;
if (second < 0) {
second = 59;
}
}
if (selection == 3) {
alarmStatus = !alarmStatus;
}
}
if (mode == 2) {
if (selection == 0) {
alarmHour--;
if (alarmHour < 0) {
alarmHour = 23;
}
}
if (selection == 1) {
alarmMinute--;
if (alarmMinute < 0) {
alarmMinute = 59;
}
}
if (selection == 2) {
alarmSecond--;
if (alarmSecond < 0) {
alarmSecond = 59;
}
}
if (selection == 3) {
alarmStatus = !alarmStatus;
}
}
}
}
if (buttonState == HIGH) {
if (mode == 1) {
if (selection == 0) {
hour++;
if (hour > 23) {
hour = 0;
}
}
if (selection == 1) {
minute++;
if (minute > 59) {
minute = 0;
}
}
if (selection == 2) {
second++;
if (second > 59) {
second = 0;
}
}
if (selection == 3) {
alarmStatus = !alarmStatus;
}
}
if (mode == 2) {
if (selection == 0) {
alarmHour++;
if (alarmHour > 23) {
alarmHour = 0;
}
}
if (selection == 1) {
alarmMinute++;
if (alarmMinute > 59) {
alarmMinute = 0;
}
}
if (selection == 2) {
alarmSecond++;
if (alarmSecond > 59) {
alarmSecond = 0;
}
}
if (selection == 3) {
alarmStatus = !alarmStatus;
}
}
}
if (buttonState2 == HIGH) {
if (mode == 1) {
if (selection == 0) {
hour--;
if (hour < 0) {
hour = 23;
}
}
if (selection == 1) {
minute--;
if (minute < 0) {
minute = 59;
}
}
if (selection == 2) {
second--;
if (second < 0) {
second = 59;
}
}
}
if (mode == 2) {
if (selection == 0) {
alarmHour--;
if (alarmHour < 0) {
alarmHour = 23;
}
}
if (selection == 1) {
alarmMinute--;
if (alarmMinute < 0) {
alarmMinute = 59;
}
}
if (selection == 2) {
alarmSecond--;
if (alarmSecond < 0) {
alarmSecond = 59;
}
}
}
}
if (buttonState3 == HIGH) {
alarmStatus = 0;
}
if (mode == 0) {
lcd.setCursor(0, 0);
lcd.print(hour);
lcd.print(":");
lcd.print(minute);
lcd.print(":");
lcd.print(second);
lcd.setCursor(0, 1);
lcd.print(alarmHour);
lcd.print(":");
lcd.print(alarmMinute);
lcd.print(":");
lcd.print(alarmSecond);
lcd.print(" ");
if (alarmStatus == 0) {
lcd.print("OFF");
} else {
lcd.print("ON");
}
}
if (mode == 1) {
lcd.setCursor(0, 0);
lcd.print("SET CLOCK");
lcd.setCursor(0, 1);
if (selection == 0) {
lcd.print("HOUR ");
} else {
lcd.print(" ");
}
if (selection == 1) {
lcd.print("MINUTE ");
} else {
lcd.print(" ");
}
if (selection == 2) {
lcd.print("SECOND ");
} else {
lcd.print(" ");
}
}
if (mode == 2) {
lcd.setCursor(0, 0);
lcd.print("SET ALARM");
lcd.setCursor(0, 1);
if (selection == 0) {
lcd.print("HOUR ");
} else {
lcd.print(" ");
}
if (selection == 1) {
lcd.print("MINUTE ");
} else {
lcd.print(" ");
}
if (selection == 2) {
lcd.print("SECOND ");
} else {
lcd.print(" ");
}
if (selection == 3) {
lcd.print("ALARM STATUS ");
} else {
lcd.print(" ");
}
if (alarmStatus == 0) {
lcd.print("OFF");
} else {
lcd.print("ON");
}
}
if (hour == alarmHour && minute == alarmMinute && second == alarmSecond && alarmStatus == 1) {
//play alarm
}
second++;
if (second > 59) {
second = 0;
minute++;
}
if (minute > 59) {
minute = 0;
hour++;
}
if (hour > 23) {
hour = 0;
}
delay(1000);
}
}