#include <LiquidCrystal_I2C.h>
#include <Countimer.h>
#include <EEPROM.h>
// ===== CALLS THE FOLLOWING LIBRARY AND MODULES ====== //
LiquidCrystal_I2C lcd(0x27, 16, 2); // LCD HEX address 0x3F -- change according to yours
Countimer tdown;
// ===== 🔠 DEFINE THE VARIABLES FOR EACH FUNCTIONS ====== //
//Define for the Tact Switches
#define bt_set 2
#define bt_up 3
#define bt_down 4
#define bt_start 5
//Constants for Date and Time
int time_s = 0;
int time_m = 0;
int time_h = 0;
int set = 0;
int flag1 = 0, flag2 = 0;
int relay = 7;
int buzzer = 8;
// ===== ✅ INITIALIZE THE FUNCTION AND STARTUP ====== //
void setup() {
Serial.begin(9600);
lcd.init(); // initialize lcd
lcd.backlight(); // switch-on lcd backlight
lcd.clear(); //clear all the previous display
//Set the 4 Tact Switch in different modes: Set, Up, Down, Start
pinMode(bt_set, INPUT_PULLUP);
pinMode(bt_up, INPUT_PULLUP);
pinMode(bt_down, INPUT_PULLUP);
pinMode(bt_start, INPUT_PULLUP);
//Set the Pin Output for the Relay and Buzzer
pinMode(relay, OUTPUT);
pinMode(buzzer, OUTPUT);
//START-UP DISPLAY
lcd.setCursor(0, 0);
lcd.print(" ARDUINO ");
lcd.setCursor(0, 1);
lcd.print("TMR CTRL RELAY");
delay(2000);
lcd.clear();
tdown.setInterval(print_time, 999);
eeprom_read();
delay(1000);
}
// ===== FUNCTION FOR THE PRINT TIME ===== //
void print_time() {
time_s = time_s - 1;
if (time_s < 0) {
time_s = 59;
time_m = time_m - 1;
}
if (time_m < 0) {
time_m = 59;
time_h = time_h - 1;
}
}
// ===== FUNCTION FOR TIMER COOLDOWN COMPLETE ===== //
void tdownComplete() {
Serial.print("ok");
}
//tdown.stop();
// ===== MAIN LOOP FUNCTION FOR THE PROGRAM ===== //
void loop() {
tdown.run();
if (digitalRead(bt_set) == 0) {
if (flag1 == 0 && flag2 == 0) {
flag1 = 1;
set = set + 1;
if (set > 3) { set = 0; }
delay(100);
}
} else {
flag1 = 0;
}
if (digitalRead(bt_up) == 0) {
if (set == 0) {
tdown.start();
flag2 = 1;
}
if (set == 1) { time_s++; }
if (set == 2) { time_m++; }
if (set == 3) { time_h++; }
if (time_s > 59) { time_s = 0; }
if (time_m > 59) { time_m = 0; }
if (time_h > 99) { time_h = 0; }
if (set > 0) { eeprom_write(); }
delay(200);
}
if (digitalRead(bt_down) == 0) {
if (set == 0) {
tdown.stop();
flag2 = 0;
}
if (set == 1) { time_s--; }
if (set == 2) { time_m--; }
if (set == 3) { time_h--; }
if (time_s < 0) { time_s = 59; }
if (time_m < 0) { time_m = 59; }
if (time_h < 0) { time_h = 99; }
if (set > 0) { eeprom_write(); }
delay(200);
}
if (digitalRead(bt_start) == 0) {
flag2 = 1;
eeprom_read();
digitalWrite(relay, HIGH);
tdown.restart();
tdown.start();
}
lcd.setCursor(0, 0);
if (set == 0) { lcd.print(" Timer "); }
if (set == 1) { lcd.print(" Set Timer SS "); }
if (set == 2) { lcd.print(" Set Timer MM "); }
if (set == 3) { lcd.print(" Set Timer HH "); }
lcd.setCursor(4, 1);
if (time_h <= 9) { lcd.print("0"); }
lcd.print(time_h);
lcd.print(":");
if (time_m <= 9) { lcd.print("0"); }
lcd.print(time_m);
lcd.print(":");
if (time_s <= 9) { lcd.print("0"); }
lcd.print(time_s);
lcd.print(" ");
if (time_s == 0 && time_m == 0 && time_h == 0 && flag2 == 1) {
flag2 = 0;
tdown.stop();
digitalWrite(relay, HIGH);
digitalWrite(buzzer, HIGH);
delay(300);
digitalWrite(buzzer, LOW);
delay(200);
digitalWrite(buzzer, HIGH);
delay(300);
digitalWrite(buzzer, LOW);
delay(200);
digitalWrite(buzzer, HIGH);
delay(300);
digitalWrite(buzzer, LOW);
}
if (flag2 == 1) {
digitalWrite(relay, LOW);
} else {
digitalWrite(relay, HIGH);
}
delay(1);
}
// ===== FUNCTION FOR EEPROM WRITE ===== //
void eeprom_write() {
EEPROM.write(1, time_s);
EEPROM.write(2, time_m);
EEPROM.write(3, time_h);
}
// ===== FUNCTION FOR EEPROM READ ===== //
void eeprom_read() {
time_s = EEPROM.read(1);
time_m = EEPROM.read(2);
time_h = EEPROM.read(3);
}