#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
LiquidCrystal_I2C lcd(0x27,16,2);
#define motor 2
#define line 3
#define tank 4
#define blue 8
#define set 5
#define inc 7
#define dec 6
long hrs, mins=30;
long h1,m1,s1,rem;
long sec;
void setup()
{
lcd.begin(16,2);
lcd.backlight();
sec=EEPROM.get(0,sec);
pinMode(motor, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(line, INPUT_PULLUP);
pinMode(tank, INPUT_PULLUP);
pinMode(set, INPUT_PULLUP);
pinMode(inc, INPUT_PULLUP);
pinMode(dec, INPUT_PULLUP);
// attachInterrupt(digitalPinToInterrupt(line), lcdClear, CHANGE);
if(digitalRead(line)==1)
{
digitalWrite(motor, LOW);
digitalWrite(blue, LOW);
lcd.setCursor(0,0);
lcd.print("Motor OFF ");
}
else
{
digitalWrite(motor, HIGH);
digitalWrite(blue, HIGH);
lcd.setCursor(0,0);
lcd.print("Motor ON ");
}
}
void loop()
{
start:
if(digitalRead(line)==0)
digitalWrite(blue,HIGH);
else
digitalWrite(blue, LOW);
if(digitalRead(motor)==1)
{
lcd.setCursor(0,0);
lcd.print("Motor ON ");
}
else
{
lcd.setCursor(0,0);
lcd.print("Motor OFF");
}
if(digitalRead(tank)==0)
{
digitalWrite(motor, LOW);
lcd.setCursor(0,0);
lcd.print("Motor OFF");
lcd.setCursor(0,1);
lcd.print("Tank Full ");
}
else
{
h1 = sec/3600;
rem = sec%3600;
m1 = rem/60;
s1 = rem%60;
sec--;
lcd.setCursor(0,1);
lcd.print("Time ");
lcd.print(h1);
lcd.print(":");
lcd.print(m1);
lcd.print(":");
lcd.print(s1);
delay(1000);
if(s1==0 or s1==10)
lcd.clear(); // clear lcd when sec=0
if(sec<1)
{
if(digitalRead(line)==0)
{
digitalWrite(motor, HIGH);
lcd.setCursor(0,0);
lcd.print("Motor ON ");
}
else
{
digitalWrite(motor, LOW);
lcd.setCursor(0,0);
lcd.print("Motor OFF ");
}
sec = hrs*3600 + mins*60;
}
if(digitalRead(line)==1)
{
digitalWrite(motor, LOW);
lcd.setCursor(0,0);
lcd.print("Motor OFF ");
}
}
if(digitalRead(set)==0)
{
lcd.clear();
loop1:
delay(50);
if(digitalRead(set)==1)
{
delay(50);
goto hour;
}
goto loop1;
hour:
lcd.setCursor(0,0);
lcd.print("Time ");
lcd.print(hrs);
lcd.print(":");
lcd.print(mins);
if(digitalRead(inc)==0)
{
hrs++;
delay(200);
lcd.clear();
}
if(digitalRead(dec)==0)
{
hrs--;
delay(200);
lcd.clear();
}
if(hrs<0)
hrs=0;
if(digitalRead(set)==0)
{
delay(50);
loop2:
if(digitalRead(set)==1)
{
delay(50);
goto minutes;
}
goto loop2;
}
goto hour;
minutes:
lcd.setCursor(0,0);
lcd.print("Time ");
lcd.print(hrs);
lcd.print(":");
lcd.print(mins);
if(digitalRead(inc)==0)
{
mins++;
delay(200);
lcd.clear();
}
if(digitalRead(dec)==0)
{
mins--;
delay(200);
lcd.clear();
}
if(mins<0)
mins=0;
if(digitalRead(set)==0)
{
loop3:
delay(50);
if(digitalRead(set)==1)
{
delay(50);
lcd.clear();
sec = hrs*3600 + mins*60;
EEPROM.put(0,sec);
goto start;
}
goto loop3;
}
goto minutes;
}
}