#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <TimerOne.h>
LiquidCrystal_I2C lcd(0x27,16,2);
#define trigger 3
#define echo 4
#define motor 7
#define buzzer 8
float time=0,distance=0;
int temp=0;
int tanklenght=50;
int tankfulllenght=18;
int workinglenght=(tanklenght-(tanklenght*10/100));
void setup() {
lcd.begin(16,2);
lcd.init();
lcd.backlight();
pinMode(trigger,OUTPUT);
pinMode(echo,INPUT);
pinMode(motor, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(2, OUTPUT);
digitalWrite(2,HIGH);
lcd.print(" Please Wait... ");
delay(1000);
lcd.clear();
lcd.print(" System ");
lcd.setCursor(0,1);
lcd.print(" Getting Ready ");
delay(2000);
lcd.clear();
lcd.print(" WATER LEVEL ");
lcd.setCursor(0,1);
lcd.print(" DISPLAY AND ");
delay(1000);
lcd.clear();
lcd.print(" AUTOMATIC PUMP ");
lcd.setCursor(0,1);
lcd.print(" control ");
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Water Level:");
lcd.setCursor(0,1);
lcd.print(workinglenght);
}
void loop() {
digitalWrite(trigger,LOW);
delayMicroseconds(2);
digitalWrite(trigger,HIGH);
delayMicroseconds(10);
digitalWrite(trigger,LOW);
delayMicroseconds(2);
time=pulseIn(echo,HIGH); // stores time span between transmitted and reflected waves
distance=time*340/20000;
lcd.setCursor(3,1);
lcd.print(distance);
if(distance<=workinglenght && distance>=tankfulllenght)
{
int percentage=((workinglenght-distance)/(workinglenght-tankfulllenght))*100;
lcd.setCursor(13,0);
lcd.print(percentage);
lcd.print("%");
lcd.setCursor(10,1);
lcd.print(distance);
delay(2000);
//digitalWrite(buzzer, LOW);
//delay(3000);
}
if (distance<tankfulllenght && temp==0)
{
digitalWrite(motor, LOW);
lcd.setCursor(0,1);
lcd.print("Water Tank Full");
delay(2000);
lcd.setCursor(0,1);
lcd.print("Motor Turned OFF");
delay(2000);
temp=1;
}
if (distance<tankfulllenght && temp==1)
{
digitalWrite(motor, LOW);
}
if (distance>workinglenght)
{
digitalWrite(motor, HIGH);
temp=0;
}
}