#include <ESP32Servo.h>
const int servoPin = 18; // Adjust this to your servo pin
const int valveOpenAngle = 90; // Angle for open position
const int valveClosedAngle = 0; // Angle for closed position (reversed for your request)
const int buttonPin = 13; // Push button pin
Servo servo;
bool servoActive = false; // Flag to indicate if servo is active
unsigned long previousMillis = 0; // Variable to store the previous time
void setup() {
servo.attach(servoPin);
pinMode(buttonPin, INPUT_PULLUP); // Set button pin as input with internal pull-up resistor
Serial.begin(115200); // Open serial communication if desired
}
void loop() {
unsigned long currentMillis = millis();
// Check if the button is pressed to toggle servo activity
if (digitalRead(buttonPin) == LOW) {
servoActive = !servoActive;
delay(250); // Debouncing delay
}
// If servo is active, move it every 1 second
if (servoActive && currentMillis - previousMillis >= 1000) {
previousMillis = currentMillis; // Update previous time
servo.write(valveOpenAngle); // Move servo to open position
Serial.println("Valve opened");
delay(500); // Adjust delay for servo to reach position
servo.write(valveClosedAngle); // Move servo to closed position
Serial.println("Valve closed");
}
// Clear serial buffer for next command
Serial.flush();
}