const int servoPin = 9;
int currentPos = 0;
int stepAngle = 5;
int speedDelay = 10;
int angleToPulse(int angle) {
return map(angle, 0, 180, 500, 2500);
}
void servoWrite(int angle) {
int pulseWidth = angleToPulse(angle);
digitalWrite(servoPin, HIGH);
delayMicroseconds(pulseWidth);
digitalWrite(servoPin, LOW);
delayMicroseconds(20000 - pulseWidth);
}
void servoMove(int targetAngle) {
targetAngle = constrain(targetAngle, 0, 180);
int step = (targetAngle > currentPos) ? stepAngle : -stepAngle;
while (currentPos != targetAngle) {
currentPos += step;
if (step > 0)
currentPos = constrain(currentPos, 0, targetAngle);
else
currentPos = constrain(currentPos, targetAngle, 180);
for (int i = 0; i < 5; i++) {
servoWrite(currentPos);
}
delay(speedDelay);
}
}
void setup() {
pinMode(servoPin, OUTPUT);
pinMode(A0, INPUT); pinMode(A1, INPUT);
}
void loop() {
int move = map(analogRead(A0), 0, 1023, 180, 0);
servoMove(move);
}