Can I control two servos simultaneously?

I don't know if exist a better solution, but the result is not to bad.

I think your idea of using a loop to step position from current to desired is just fine. You need however move away from using delay() (as it will block execution) and rather rely on time intervals.

The following code fragment may give you some ideas on how this can be implemented in Arduino.

#define SERVO_SPEED 25  (minimum number of milliseconds per degree)

int servo1_pos;  // desired angle for servo1
int servo2_pos;  // desired angle for servo2

void loop()
{
  static unsigned long servo_time;
  
  // check time since last servo position update 
  if ((millis()-servo_time) >= SERVO_SPEED) {
    servo_time = millis(); // save time reference for next position update
    
    // update servo1 position
    // if desired position is different from current position move one step left or right
    if (servo1_pos > servo1.read()) servo1.write(servo1.read() + 1);
    else if (servo1_pos < servo1.read()) servo1.write(servo1.read() - 1);

    // update servo2 position
    // if desired position is different from current position move one step left or right
    if (servo2_pos > servo2.read()) servo2.write(servo2.read() + 1);
    else if (servo2_pos < servo2.read()) servo2.write(servo2.read() - 1);
  }
}

You should be able to scale this to "any number" of servos and still have plenty processing capacity for other tasks.

1 Like