#include <Servo.h>
Servo myservo;
int potpin = 0;
int val;
int lockInPositions[5] = {35, 70, 105, 140, 175}; // Five lock-in positions
int hysteresis = 3; // Hysteresis range in degrees
int maxServoPosition = 180;
int springZone = 5;
int springPosition = maxServoPosition - springZone;
void setup() {
myservo.attach(9);
}
void loop() {
val = analogRead(potpin);
val = map(val, 0, 1023, 0, springPosition);
for (int i = 0; i < 5; i++) {
if (abs(val - lockInPositions[i]) < hysteresis) {
val = lockInPositions[i]; // Lock servo in position
break;
}
}
// Spring effect in the last 5 degrees
if (val >= springPosition) {
val = map(val, springPosition, maxServoPosition, springPosition, maxServoPosition);
}
myservo.write(val);
delay(15);
}