#include <Servo.h>
#define ENCODER_CLK 2
#define ENCODER_DT 3
#define ENCODER_SW 4
int servoPin = 11;
int servoPos = 90;
Servo servo1;
volatile int lastClkState = HIGH;
volatile int lastDtState = HIGH;
volatile int lastButtonState = HIGH;
void setup() {
Serial.begin(115200);
pinMode(ENCODER_CLK, INPUT);
pinMode(ENCODER_DT, INPUT);
pinMode(ENCODER_SW, INPUT_PULLUP); // Enable internal pull-up resistor for the switch
servo1.attach(servoPin);
attachInterrupt(digitalPinToInterrupt(ENCODER_CLK), clkISR, FALLING);
}
void loop() {
servo1.write(servoPos);
int buttonState = digitalRead(ENCODER_SW);
if (buttonState != lastButtonState) {
servoPos = 90; // Reset servo position when button is pressed
lastButtonState = buttonState;
}
}
void clkISR() {
int dtState = digitalRead(ENCODER_DT);
if (dtState == HIGH) {
Serial.println("Rotated clockwise ⏩");
if (servoPos < 180) {
servoPos += 10;
}
} else {
Serial.println("Rotated counterclockwise ⏪");
if (servoPos > 0) {
servoPos -= 10;
}
}
servo1.write(servoPos);
}