#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display
#include<EEPROM.h>
//const int rs = 7, en = 6, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
//LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
const int stsp = A0;
const int inc = A1;
const int dec = A2;
const int set = A3;
const int buzz = 9;
const int relay = 8;
int hrs = 0;
int Min = 0;
int sec = 0;
unsigned int check_val = 59;
int add_chk = 0;
int add_hrs = 1;
int add_min = 2;
int add_sec = 3;
bool RUN = true;
bool sec_flag = true;
bool min_flag = true;
bool hrs_flag = true;
void setup()
{
//lcd.begin(16, 2);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" IoT4 - 16 ");
lcd.setCursor(0, 1);
lcd.print(" COUNTDOWN TIMER");
pinMode(stsp, INPUT_PULLUP);
pinMode(inc, INPUT_PULLUP);
pinMode(dec, INPUT_PULLUP);
pinMode(set, INPUT_PULLUP);
pinMode(buzz, OUTPUT);
pinMode(relay, OUTPUT);
digitalWrite(relay, LOW);
digitalWrite(buzz, LOW);
if (EEPROM.read(add_chk) != check_val)
{
EEPROM.write(add_chk, check_val);
EEPROM.write(add_hrs, 0);
EEPROM.write(add_min, 0);
EEPROM.write(add_sec, 0);
}
else
{
hrs = EEPROM.read(add_hrs);
Min = EEPROM.read(add_min);
sec = EEPROM.read(add_sec);
}
//delay(1500);
INIT();
}
void loop()
{
if (digitalRead(stsp) == LOW)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" IoT4 - 16 ");
lcd.setCursor(0, 1);
lcd.print(" COUNTDOWN TIMER");
delay(100);
RUN = true;
while (RUN)
{
if (digitalRead(stsp) == LOW)
{
delay(1000);
if (digitalRead(stsp) == LOW)
{
digitalWrite(relay, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" IoT4 - 16 ");
lcd.setCursor(0, 1);
lcd.print(" COUNTDOWN TIMER");
lcd.setCursor(0, 3);
lcd.print(" TIMER STOPPED");
lcd.setCursor(0, 3);
lcd.print("--------------------");
delay(2000);
RUN = false;
INIT();
break;
}
}
digitalWrite(relay, HIGH);
sec = sec - 1;
delay(1000);
if (sec == -1)
{
sec = 59;
Min = Min - 1;
}
if (Min == -1)
{
Min = 59;
hrs = hrs - 1;
}
if (hrs == -1)
hrs = 0;
lcd.setCursor(0, 3);
lcd.print("*Pemberian Pakan 1*");
lcd.setCursor(6, 2);// tampilan jam 4,2
if (hrs <= 9)
{
lcd.print('0');
}
lcd.print(hrs);
lcd.print(':');
if (Min <= 9)
{
lcd.print('0');
}
lcd.print(Min);
lcd.print(':');
if (sec <= 9)
{
lcd.print('0');
}
lcd.print(sec);
if (hrs == 0 && Min == 0 && sec == 0)
{
digitalWrite(relay, LOW);
lcd.setCursor(6, 2);//menampilkan waktu
RUN = false;
for (int i = 0; i < 20; i++)
{
//digitalWrite(buzz, HIGH);
tone(buzz,250);
delay(100);
tone(buzz,250);
//digitalWrite(buzz, LOW);
delay(100);
noTone(buzz);
}
INIT();
}
}
}
if (digitalRead(set) == LOW)
{
//delay(200);
while (sec_flag)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" IoT4 - 16 ");
lcd.setCursor(0, 1);
lcd.print(" COUNTDOWN TIMER");
lcd.setCursor(0, 3);
lcd.print("SET DETIK: ");
lcd.print(sec);
delay(200);
if (digitalRead(inc) == LOW)
{
sec = sec + 1;
if (sec > 60) sec = 0;
delay(200);
}
if (digitalRead(dec) == LOW)
{
sec = sec - 1;
if (sec <= -1) sec = 0;
delay(200);
}
if (digitalRead(set) == LOW)
{
sec_flag = false;
delay(250);
}
}
while (min_flag)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" IoT4 - 16 ");
lcd.setCursor(0, 1);
lcd.print(" COUNTDOWN TIMER");
lcd.setCursor(0, 3);
lcd.print("SET MENIT: ");
lcd.print(Min);
delay(200);
if (digitalRead(inc) == LOW)
{
Min = Min + 1;
if (Min >= 60) Min = 0;
delay(200);
}
if (digitalRead(dec) == LOW)
{
Min = Min - 1;
if (Min <= -1) Min = 0;
delay(200);
}
if (digitalRead(set) == LOW)
{
min_flag = false;
delay(250);
}
}
while (hrs_flag)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" IoT4 - 16 ");
lcd.setCursor(0, 1);
lcd.print(" COUNTDOWN TIMER");
lcd.setCursor(0, 3);
lcd.print("SET JAM: ");
lcd.print(hrs);
delay(200);
if (digitalRead(inc) == LOW)
{
hrs = hrs + 1;
if (hrs > 23) hrs = 0;
delay(200);
}
if (digitalRead(dec) == LOW)
{
hrs = hrs - 1;
if (hrs <= -1) hrs = 0;
delay(200);
}
if (digitalRead(set) == LOW)
{
hrs_flag = false;
delay(250);
}
}
if (hrs == 0 && Min == 0 && sec == 0)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" IoT4 - 16 ");
lcd.setCursor(0, 1);
lcd.print(" COUNTDOWN TIMER");
lcd.setCursor(0, 3);
lcd.print(" INVAID TIME");
delay(2000);
}
else
{
EEPROM.write(add_hrs, hrs);
EEPROM.write(add_min, Min);
EEPROM.write(add_min, sec);
}
INIT();
}
}
void INIT()
{
hrs = EEPROM.read(add_hrs);
Min = EEPROM.read(add_min);
sec = EEPROM.read(add_sec);
//sec = 0;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" IoT4 - 16 ");
lcd.setCursor(0, 1);
lcd.print(" COUNTDOWN TIMER");
lcd.setCursor(0, 3);
lcd.print(" Start / Set Time");
lcd.setCursor(6, 2); //menampilkan waktu
if (hrs <= 9)
{
lcd.print('0');
}
lcd.print(hrs);
//lcd.print(':');
lcd.print('=');
if (Min <= 9)
{
lcd.print('0');
}
lcd.print(Min);
//lcd.print(':');
lcd.print('=');
if (sec <= 9)
{
lcd.print('0');
}
lcd.print(sec);
//lcd.print(':');
sec_flag = true;
min_flag = true;
hrs_flag = true;
delay(500);
}
START/STOP
INC
SET
DEC
BUZZER
ALARM