#include <LiquidCrystal.h>
#include <Servo.h>
#define TRIG_PIN 9
#define ECHO_PIN 10
#define LED_PIN 11
#define BUZZER_PIN 12
#define SERVO_PIN 13
#define BUTTON_PIN 2
LiquidCrystal lcd(7, 8, 4, 5, 6, 3);
Servo myServo;
const int threshold = 100;
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
myServo.attach(SERVO_PIN);
lcd.begin(16, 2);
lcd.print("Water Level:");
}
void loop() {
// Measure water level
long duration, distance;
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = (duration / 2) / 29.1; // Convert to cm
// Display on LCD
lcd.setCursor(0, 1);
lcd.print(distance);
lcd.print(" cm ");
// Check threshold
if (distance < threshold) {
digitalWrite(LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
myServo.write(90); // Turn servo to 90 degrees
} else {
digitalWrite(LED_PIN, HIGH);
digitalWrite(BUZZER_PIN, HIGH);
myServo.write(0); // Turn servo back to 0 degrees
}
// Manual button press
if (digitalRead(BUTTON_PIN) == LOW) {
digitalWrite(LED_PIN, HIGH);
digitalWrite(BUZZER_PIN, HIGH);
myServo.write(90); // Turn servo to 90 degrees
delay(50); // Debounce delay
}
delay(50);
}