Ramping / Easing servo between points

Try something like this:

int oldpos = pos;
int dist = abs(marker1 - pos);
int d = dist > 10 ? 5 : dist >> 1;
int del = delaySet * 3;
for (; pos < marker1; pos++) {
  myServo.write(pos);
  delay(del);
  if (pos - oldpos < d) {
    del = delaySet * (1 + (pos - oldpos) * 2 / 5);
  } else if (marker1 - pos < d) {
    del = delaySet * (1 + (marker1 - pos) * 2 / 5);
  } else {
    del = delaySet;
  }
}

You have to adapt this for every movement "for" loop in your existing code. This just gives you a ramp at the beginning and the end.

1 Like