#include <LiquidCrystal_I2C.h>
#include <Wire.h>
//-------------------------------------Define variable
LiquidCrystal_I2C lcd(0x27, 20, 4);
#define Bad_Pump 12 //int Bad_Pump = 12;
#define Good_Pump 14
#define WaterFloat_pin 35
int WaterFloat_val;
int State = 0;
int Blynksw1;
int Blynksw2;
int Blynksw3;
int Blynksw4;
//-------------------------------------Setup
void setup() {
Serial.begin(9600);
//--------------< LCD >
lcd.init();
lcd.backlight();
//--------------< Relay & Pump >
pinMode(Bad_Pump, OUTPUT);
pinMode(Good_Pump, OUTPUT);
digitalWrite(Bad_Pump, 1); // High is turn off
digitalWrite(Good_Pump, 1);
//--------------< WaterFloat sensor >
pinMode(WaterFloat_pin, INPUT);
}
//-------------------------------------Loop
void loop() {
switch(State){
case 0: //-----------< state "START" >
lcd.setCursor(3, 1); lcd.print("Press any key");
if(Blynksw1 == 1 || Blynksw2 == 1 || Blynksw3 == 1 || Blynksw4 == 1){
State = 1;
lcd.clear();
}
break;
case 1: //-----------< state "MENU" >
lcd.setCursor(0, 0); lcd.print("Press 2: BAD_PUMP");
lcd.setCursor(0, 1); lcd.print("Press 3: GOOD_PUMP");
lcd.setCursor(0, 2); lcd.print("Press 4: WaterSensor");
if(Blynksw2 == 1){
State = 2;
lcd.clear();
}
else if(Blynksw3 == 1){
State = 3;
lcd.clear();
}
else if(Blynksw4 == 1){
State = 4;
lcd.clear();
}
lcd.clear();
break;
case 2: //-----------< state "BAD_PUMP" >
lcd.setCursor(5, 0); lcd.print("BAD_PUMP");
lcd.setCursor(0, 1); lcd.print("Push first button to start");
lcd.setCursor(0, 3); lcd.print("Press 4: back to menu");
if(Blynksw1 == 1){
digitalWrite(Bad_Pump, 0); //BAD_PUMP working
}
else if(Blynksw1 == 0){
digitalWrite(Bad_Pump, 1); //BAD_PUMP stop work.
}
else if(Blynksw4 == 1){
State = 1;
lcd.clear();
}
break;
case 3: //-----------< state "GOOD_PUMP" >
lcd.setCursor(5, 0); lcd.print("GOOD_PUMP");
lcd.setCursor(0, 1); lcd.print("Push fisrt button to start");
lcd.setCursor(0, 3); lcd.print("Press 4: back to menu");
if(Blynksw1 == 1){
digitalWrite(Good_Pump, 0); //BAD_PUMP working
}
else if(Blynksw1 == 0){
digitalWrite(Bad_Pump, 1); //BAD_PUMP stop work.
}
else if(Blynksw4 == 1){
State = 1;
lcd.clear();
}
break;
case 4: //-----------< state "WATER LEVEL SENSOR" >
lcd.setCursor(0, 0); lcd.print("WATER LEVEL SENSOR");
lcd.setCursor(8, 1); lcd.print("-> " + String(WaterFloat_val));
Blynk.virtualWrite(V5, String(WaterFloat_val));
if(Blynksw4 == 1){
State = 1;
lcd.clear();
}
break;
}
WaterLevelSensor();
delay(100);
}
//-------------------------------------Custom function
void WaterLevelSensor(){
WaterFloat_val = analogRead(WaterFloat_pin);
WaterFloat_val = WaterFloat_val == 4095 ? 0 : 1;
//Serial.println(WaterFloat_val);
}
BLYNK_WRITE(V1){ //Blynk Switch 1
if(param.asInt() == 1){
Blynksw1 = 1;
}
else{
Blynksw1 = 0;
}
}
BLYNK_WRITE(V2){ //Blynk Switch 2
if(param.asInt() == 1){
Blynksw2 = 1;
}
else{
Blynksw2 = 0;
}
}
BLYNK_WRITE(V3){ //Blynk Switch 3
if(param.asInt() == 1){
Blynksw3 = 1;
}
else{
Blynksw3 = 0;
}
}
BLYNK_WRITE(V4){ //Blynk Switch 4
if(param.asInt() == 1){
Blynksw4 = 1;
}
else{
Blynksw4 = 0;
}
}