#include <EEPROM.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
long duration, inches;
int set_val, percentage;
bool state, pump;
void setup() {
lcd.begin(16, 2);
lcd.print("WATER LEVEL:");
lcd.setCursor(0, 1);
lcd.print("PUMP: OFF MANUAL");
pinMode(8, OUTPUT);
pinMode(9, INPUT);
pinMode(10, INPUT_PULLUP);
pinMode(11, INPUT_PULLUP);
pinMode(12, OUTPUT);
set_val = EEPROM.read(0);
if (set_val > 150) set_val = 150;
}
void loop() {
digitalWrite(8, HIGH); // Turn on the trigger pin
delayMicroseconds(10); // Wait for 10 microseconds
digitalWrite(8, LOW); // Turn off the trigger pin
duration = pulseIn(9, HIGH); // Measure the pulse duration
inches = microsecondsToInches(duration);
percentage = (set_val - inches) * 100 / set_val;
lcd.setCursor(12, 0);
if (percentage < 0) percentage = 0;
lcd.print(percentage);
lcd.print("% ");
if (percentage < 30 && digitalRead(11)) pump = 1;
if (percentage > 99) pump = 0;
digitalWrite(12, pump);
lcd.setCursor(5, 1);
if (pump == 1) lcd.print("ON ");
else if (pump == 0) lcd.print("OFF ");
lcd.setCursor(9, 1);
if (!digitalRead(11)) lcd.print("MANUAL");
else lcd.print("AUTO ");
}
long microsecondsToInches(long microseconds) {
// Convert microseconds to inches using the speed of sound (approximately 74 microseconds per inch)
return microseconds/74/2;
}