#include <WiFi.h>
#include <WiFiClient.h>
#include <EEPROM.h>
#include <LiquidCrystal.h>
#include <ThingSpeak.h>
#define rs 13
#define en 12
#define d4 33
#define d5 32
#define d6 27
#define d7 26
#define motor 19
#define slide 18 //Switch for Auto Manual mode
#define trig 16
#define echo 15
#define led 17 //Motor
LiquidCrystal lcd(rs,en,d4,d5,d6,d7);
long duration,inches;
bool state,pump;
int set_val,percentage;
int min_level = 30;
int max_level = 90;
int auto_mode;
int manual;
const char *ssid = "wokwi-GUEST";
const char *password = "";
WiFiClient client;
unsigned long myChannelId = 2646228;
char *MywriteAPIkey = "Z9BQ9KCP4FALIKG4";
int statusCode;
void setup() {
Serial.begin(115200);
Serial.print("Connecting to WiFi.........");
WiFi.begin(ssid,password,6);
while(WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(200);
}
Serial.println("wiFi Connected successfully !");
//WiFi.mode(WIFI.STA);
ThingSpeak.begin(client);
lcd.begin(16,2);
lcd.print("Water Level");
lcd.setCursor(0,1);
lcd.print("PUMP:OFF MANUAL");
pinMode(motor,INPUT_PULLUP);
pinMode(slide,INPUT_PULLUP);
pinMode(trig,OUTPUT);
pinMode(echo,INPUT);
pinMode(led,OUTPUT);
set_val = EEPROM.read(0);
if(set_val > 150)
set_val = 150;
}
void loop()
{
// put your main code here, to run repeatedly:
digitalWrite(trig,LOW);
delayMicroseconds(2);
digitalWrite(trig,HIGH);
delayMicroseconds(2);
digitalWrite(trig,LOW);
delayMicroseconds(2);
duration = pulseIn(echo,HIGH);
inches = microsecondsToInches(duration);
percentage = (set_val - inches)*100/set_val; //water value
lcd.setCursor(12,0);
if(percentage < 0)
percentage = 0;
lcd.print(percentage);
lcd.print("% ");
auto_mode = digitalRead(slide);
if((percentage < min_level) and auto_mode)
pump = 1; //pump is ON
if(percentage > max_level)
pump = 0 ; //Pump is OFF
digitalWrite(led, !pump);
lcd.setCursor(5,1);
if(pump == 1)
lcd.print("ON");
else if (pump == 0)
lcd.print("OFF");
lcd.setCursor(9,1);
if(!auto_mode)
lcd.print("MANUAL");
else
lcd.print("AUTO");
manual = digitalRead(motor);
if(!manual and !state and auto_mode)
{
state = 1 ;
set_val = inches;
EEPROM.write(0,set_val);
}
if (!manual and !state and !auto_mode)
{
state = 1;
pump = !pump;
}
if(manual)
state = 0;
delay(500);
ThingSpeak.setField(5,percentage);
ThingSpeak.setField(6,auto_mode);
ThingSpeak.setField(7,pump);
statusCode = ThingSpeak.writeFields(myChannelId,MywriteAPIkey);
if (statusCode == 200) //Sucsess
{
Serial.println("Data written to Thingspeak channel successfully!");
Serial.println("Water Level :");
Serial.println(percentage);
Serial.print("%,Automated Mode :");
if (auto_mode)
Serial.print("ON");
else
Serial.print("OFF");
Serial.print(" ;Pump status :");
if (pump == 1)
Serial.print("ON");
else
Serial.print("OFF");
}
else Serial.print("Error in writing data in ThingSPeak with HTTP code: " + statusCode);
delay(5000);
}
long microsecondsToInches(long microseconds)
{
return (microseconds / 74 / 2);
}