//-------------------------------------Config Blynk
#define BLYNK_TEMPLATE_ID "TMPL6yQZZRZMn"
#define BLYNK_TEMPLATE_NAME "Smart Fish tank"
#define BLYNK_AUTH_TOKEN "PGfVH5xt981PY856bvjzHzw3eOpMo3Ic"
#include <BlynkSimpleEsp32.h>
#include <WiFi.h>
#define ssid "Wokwi-GUEST"
#define pass ""
#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 BlynkswStart;
int BlynkswA;
int BlynkswB;
int BlynkswC;
int BlynkswPump;
WidgetLCD lcd(V5);
//-------------------------------------Setup
void setup() {
Serial.begin(9600);
//--------------< Blynk >
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
//--------------< 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);
lcd.clear();
}
//-------------------------------------Loop
void loop() {
Blynk.run();
switch(State){
case 0: //-----------< state "START" >
lcd.print(0, 0, "PressStartToMENU");
if(BlynkswStart == 1){
State = 1;
lcd.clear();
}
break;
case 1: //-----------< state "MENU" >
lcd.print(1, 0, "A:BAD B:GOOD");
lcd.print(1, 1, "C:WaterSenser");
if(BlynkswA == 1){
State = 2;
lcd.clear();
}else if(BlynkswB == 1){
State = 3;
lcd.clear();
}else if(BlynkswC == 1){
State = 4;
lcd.clear();
}
break;
case 2: //-----------< state "BAD_PUMP" >
lcd.print(0, 0, "PUMPBAD >>> ON");
lcd.print(0, 1, "Start:Back MENU");
if(BlynkswPump == 1){
digitalWrite(Bad_Pump, 0); // BAD_PUMP working.
}else if(BlynkswPump == 0){
digitalWrite(Bad_Pump, 1); // BAD_PUMP stop work.
}
if(BlynkswStart == 1){
State = 1;
lcd.clear();
}
break;
case 3: //-----------< state "GOOD_PUMP" >
lcd.print(0, 0, "PUMPGOOD >>> ON");
lcd.print(0, 1, "Start:Back MENU");
if(BlynkswPump == 1){
digitalWrite(Good_Pump, 0); // BAD_PUMP working.
}else if(BlynkswPump == 0){
digitalWrite(Good_Pump, 1); // BAD_PUMP stop work.
}
if(BlynkswStart == 1){
State = 1;
lcd.clear();
}
break;
case 4: //-----------< state "WATER LEVEL SENSOR" >
lcd.print(0, 0, "WATER LEVEL ->" + String(WaterFloat_val));
lcd.print(0, 1, "Start:Back MENU");
if(BlynkswStart == 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;
}
BLYNK_WRITE(V0){ // Blynk Switch Start
if(param.asInt() == 1){
BlynkswStart = 1;
}else{
BlynkswStart = 0;
}
}
BLYNK_WRITE(V1){ // Blynk Switch A
if(param.asInt() == 1){
BlynkswA = 1;
}else{
BlynkswA = 0;
}
}
BLYNK_WRITE(V2){ // Blynk Switch B
if(param.asInt() == 1){
BlynkswB = 1;
}else{
BlynkswB = 0;
}
}
BLYNK_WRITE(V3){ // Blynk Switch C
if(param.asInt() == 1){
BlynkswC = 1;
}else{
BlynkswC = 0;
}
}
BLYNK_WRITE(V4){ // Blynk Switch Pump
if(param.asInt() == 1){
BlynkswPump = 1;
}else{
BlynkswPump = 0;
}
}