// Upper Tank Sensor
#define TRIG_UPPER 26
#define ECHO_UPPER 25
// Lower Tank Sensor
#define TRIG_LOWER 14
#define ECHO_LOWER 16
// Upper Tank LED Indicators
#define UPPER_LOWLED 18
#define UPPER_MIDLED 19
#define UPPER_HIGHLED 21
// Lower Tank LED Indicators
#define LOWER_LOWLED 5
#define LOWER_HIGHLED 4
// Motor Control
#define MOTOR 27
#define MOTOR_LED 2 // Motor Indicator LED
void setup() {
Serial.begin(115200);
// Pin Modes for Upper Tank LEDs
pinMode(UPPER_LOWLED, OUTPUT);
pinMode(UPPER_MIDLED, OUTPUT);
pinMode(UPPER_HIGHLED, OUTPUT);
// Pin Modes for Lower Tank LEDs
pinMode(LOWER_LOWLED, OUTPUT);
pinMode(LOWER_HIGHLED, OUTPUT);
// Pin Modes for Motor & Motor Indicator LED
pinMode(MOTOR, OUTPUT);
pinMode(MOTOR_LED, OUTPUT);
digitalWrite(MOTOR, LOW); // Motor OFF initially
digitalWrite(MOTOR_LED, LOW); // Motor LED OFF initially
// Pin Modes for Ultrasonic Sensors
pinMode(TRIG_UPPER, OUTPUT);
pinMode(ECHO_UPPER, INPUT);
pinMode(TRIG_LOWER, OUTPUT);
pinMode(ECHO_LOWER, INPUT);
}
// Function to Measure Distance
int getDistance(int trigPin, int echoPin) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
int duration = pulseIn(echoPin, HIGH);
int distance = duration / 58; // Convert to cm
return distance;
}
void loop() {
int upperLevel = getDistance(TRIG_UPPER, ECHO_UPPER);
int lowerLevel = getDistance(TRIG_LOWER, ECHO_LOWER);
Serial.print("Upper Tank Level: ");
Serial.print(upperLevel);
Serial.print(" cm, Lower Tank Level: ");
Serial.println(lowerLevel);
// Upper Tank LED Control
if (upperLevel < 100) {
digitalWrite(UPPER_LOWLED, LOW);
digitalWrite(UPPER_MIDLED, HIGH);
digitalWrite(UPPER_HIGHLED, HIGH);
}
else if (upperLevel > 200 && upperLevel < 400) {
digitalWrite(UPPER_LOWLED, HIGH);
digitalWrite(UPPER_MIDLED, LOW);
digitalWrite(UPPER_HIGHLED, HIGH);
}
else if (upperLevel >= 400) {
digitalWrite(UPPER_LOWLED, HIGH);
digitalWrite(UPPER_MIDLED, HIGH);
digitalWrite(UPPER_HIGHLED, LOW);
}
// Lower Tank LED Control
if (lowerLevel < 100) {
digitalWrite(LOWER_LOWLED, LOW);
digitalWrite(LOWER_HIGHLED, HIGH);
}
else if (lowerLevel >= 300) {
digitalWrite(LOWER_LOWLED, HIGH);
digitalWrite(LOWER_HIGHLED, LOW);
}
// Motor Control Logic & Motor Indicator LED
if (upperLevel < 100 && lowerLevel > 100) {
digitalWrite(MOTOR, HIGH); // Turn ON motor
digitalWrite(MOTOR_LED, HIGH); // Turn ON motor indicator
Serial.println("Motor ON");
}
else if (upperLevel >= 400 || lowerLevel < 100) {
digitalWrite(MOTOR, LOW); // Turn OFF motor
digitalWrite(MOTOR_LED, LOW); // Turn OFF motor indicator
Serial.println("Motor OFF");
}
delay(2000); // Wait 2 seconds before next measurement
}