#include <EEPROM.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
const int slideSwitchPin = 10; // Slide switch pin
const int triggerPin = 8;
const int echoPin = 9;
const int buzzerPin = 13;
const int thresholdPin = A0;
const int potPin = A1; // Slide potentiometer pin
long duration, inches;
int set_val, percentage;
bool pumpState = false;
bool manualMode = false;
void setup() {
lcd.begin(16, 2);
lcd.print("WATER LEVEL:");
lcd.setCursor(0, 1);
lcd.print("PUMP: OFF AUTO");
pinMode(triggerPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(thresholdPin, INPUT);
pinMode(potPin, INPUT); // Slide potentiometer pin
pinMode(slideSwitchPin, INPUT_PULLUP); // Slide switch pin
set_val = EEPROM.read(0);
if (set_val > 150) set_val = 150;
}
void loop() {
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
duration = pulseIn(echoPin, HIGH);
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 && !manualMode) {
pumpState = true;
}
if (percentage > 99) {
pumpState = false;
}
digitalWrite(buzzerPin, pumpState ? HIGH : LOW); // Activate buzzer if pump is on
lcd.setCursor(5, 1);
if (pumpState) lcd.print("ON ");
else lcd.print("OFF ");
lcd.setCursor(11, 1);
if (manualMode) lcd.print("MANUAL");
else lcd.print("AUTO ");
if (digitalRead(slideSwitchPin) == LOW) { // Slide switch activated (connected to GND)
manualMode = !manualMode; // Toggle manual/auto mode
delay(500); // Debounce delay
}
if (manualMode && digitalRead(slideSwitchPin) == HIGH) { // Slide switch in auto mode position
set_val = analogRead(thresholdPin); // Read the analog value from the potentiometer
set_val = map(set_val, 0, 1023, 0, 150); // Map the analog value to the range 0-150
EEPROM.write(0, set_val); // Save the threshold value to EEPROM
delay(500); // Debounce delay
}
delay(500);
}
long microsecondsToInches(long microseconds) {
return microseconds / 74 / 2;
}