/*
Servo button demo
Arduino | coding-help
Jaybak11 — 8:03 PM Saturday, November 8, 2025
Ok hive mind... I need a little coding help.
*/
#include <Servo.h>
const int BTN_PIN = 2;
const int SERVO_PIN = 12;
const unsigned long SPEED = 50; // smaller is faster
bool moveDir = false;
int pos = 0;
int oldBtnState = HIGH; // pin idles HIGH
unsigned long prevTime = 0;
Servo servo;
bool checkButton() {
bool isPressed = false;
int btnState = digitalRead(BTN_PIN);
if (btnState != oldBtnState) { // if it changed
oldBtnState = btnState; // remember state for next time
//Serial.print("Button");
if (btnState == LOW) { // was just pressed
//Serial.println(" pressed.");
isPressed = true;
} else { // was just released
//Serial.println(" released.");
}
delay(20); // debounce
}
return isPressed;
}
void moveServo(bool dir) {
if (dir) {
Serial.println("Close");
for (pos = 90; pos >= 0; pos--) { // decrement by 1 degree
servo.write(pos);
delay(SPEED);
}
} else {
Serial.println("Open");
for (pos = 0; pos <= 90; pos++) { // increment by 1 degree
servo.write(pos);
delay(SPEED);
}
}
}
void setup() {
Serial.begin(115200);
pinMode(BTN_PIN, INPUT_PULLUP);
servo.attach(SERVO_PIN);
servo.write(90);
Serial.println("Press the button!\n");
}
void loop() {
if (checkButton()) {
Serial.println("Button pressed");
moveDir = !moveDir;
moveServo(moveDir);
}
}