const int trigPin = 6;
const int echoPin = 7;
const int ledPins[] = {11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
const int numLeds = sizeof(ledPins) / sizeof(ledPins[0]);
const int pumpPin = 4;
const int buttonPin = 3;
unsigned long previousMillis = 0;
const long pumpInterval = 30000; // 30 seconds
bool activatePump = false;
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
for (int i = 0; i < numLeds; i++) {
pinMode(ledPins[i], OUTPUT);
}
pinMode(pumpPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
unsigned long currentMillis = millis();
// Check if the button is pushed
if (digitalRead(buttonPin) == LOW) {
activatePump = true;
delay(50); // Debounce delay
}
// Ultrasonic sensor measurement
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration / 58.2; // Convert to centimeters
// Display water level on LED bar graph
int ledsToLight = map(distance, 120, 2, 0, numLeds);
for (int i = 0; i < numLeds; i++) {
digitalWrite(ledPins[i], i < ledsToLight ? HIGH : LOW);
}
// Check pump conditions
if (activatePump && (currentMillis - previousMillis >= pumpInterval || distance < 80)) {
previousMillis = currentMillis;
digitalWrite(pumpPin, HIGH); // Activate the pump
activatePump = true;
} else {
digitalWrite(pumpPin, LOW); // Deactivate the pump
}
}