const int greenLedPin = 13;
const int redLedPin = 12;
const int buttonPin = 7;
#include <Servo.h>
Servo myServo;
int buttonState = 0;
int lastButtonState = HIGH;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
int targetPos = 90;
void setup() {
pinMode(greenLedPin, OUTPUT);
pinMode(redLedPin, OUTPUT);
myServo.attach(9);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
// Sweep the servo from 0 to 180 degrees
for (int pos = 0; pos <= 180; pos++) {
myServo.write(pos);
delay(15);
}
// Sweep the servo back from 180 to 0 degrees
for (int pos = 180; pos >= 0; pos--) {
myServo.write(pos);
delay(15);
}
// Check button state with debounce
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis(); // Reset debounce timer
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == LOW) { // Button pressed
if (myServo.read() == targetPos) {
digitalWrite(greenLedPin, HIGH); // Success: Servo is at 90 degrees
delay(1000); // Keep LED on for 1 second
digitalWrite(greenLedPin, LOW);
} else {
digitalWrite(redLedPin, HIGH); // Failure: Servo is not at 90 degrees
delay(1000); // Keep LED on for 1 second
digitalWrite(redLedPin, LOW);
}
}
}
}
lastButtonState = reading; // Save the last button state
}