#include <EEPROM.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // initialize pins
long duration, inches;
int set_val,percentage;
bool state,pump;
void setup() {
lcd.begin(16, 2); // initialize lcd screen, set screen dimensions
lcd.print("WATER LEVEL:"); // print water level
lcd.setCursor(0, 1); // get to next line
lcd.print("PUMP:OFF MANUAL"); // initialize to manual
pinMode(2, OUTPUT); //set pin to give output
pinMode(3, INPUT); // set pin to give input
pinMode(10, INPUT_PULLUP); //set pin to default high
pinMode(11, INPUT_PULLUP); //set pin to default high
pinMode(13, OUTPUT); // set pin to output
set_val=EEPROM.read(0); // set
if(set_val>150)set_val=150;
}
void loop() {
digitalWrite(2, HIGH); //set pin 2 to high
delayMicroseconds(10); // produce delay
digitalWrite(2, LOW); // set pin 2 to low
duration = pulseIn(3, HIGH);// measures time of pin going from high to low
inches = microsecondsToInches(duration); //based on the time taken for pin to go from high to low, converts to distance
percentage=(set_val-inches)*100/set_val;// sets percentage value based on distance of water surface
lcd.setCursor(12, 0); // shifts cursor to 12th place
if(percentage<0)percentage=0; //if else statement
lcd.print(percentage);
lcd.print("% ");
if(percentage<30&digitalRead(11))pump=1; // if percentage is less than 30%, turn on pump
if(percentage>95)pump=0; // if percentage greater than 95%, turn off pump
digitalWrite(13,!pump); //turn on relay led
lcd.setCursor(5, 1); // shift cursor to position
if(pump==1)lcd.print("ON ");// if pump is on, show "on" on screen
else if(pump==0) lcd.print("OFF");// if pump is off, show "off" on screen
lcd.setCursor(9, 1); // shift cursor to point
if(!digitalRead(11))lcd.print("MANUAL"); // if slide switch is on manual, print "manual"
else lcd.print("AUTO "); //else print "auto"
if(!digitalRead(10)&!state&digitalRead(11)){
state=1;
set_val=inches;
EEPROM.write(0, set_val);
}
if(!digitalRead(10)&!state&!digitalRead(11)){
state=1;
pump=!pump;
}
if(digitalRead(10))state=0;
delay(500);
}
long microsecondsToInches(long microseconds) {
return microseconds / 74 / 2;
}