Reducir velocidad movimiento servo PCA9685

Buenas tardes:

Sigo trasteando con el movimiento simultaneo de varios servos, estoy usando una placa que me recomendó surbyte la adafruit PCA9685, el codigo que estoy usando junto con la librería de adafruit es este

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

Adafruit_PWMServoDriver servos = Adafruit_PWMServoDriver(0x40);

unsigned int pos0=172; // ancho de pulso en cuentas para pocicion 0°
unsigned int pos180=565; // ancho de pulso en cuentas para la pocicion 180°

void setup() {
  servos.begin();  
  servos.setPWMFreq(60); //Frecuecia PWM de 60Hz o T=16,66ms
}

void setServo(uint8_t n_servo, int angulo) {
  int duty;
  duty=map(angulo,0,180,pos0, pos180);
  servos.setPWM(n_servo, 0, duty);  
}

void loop() {
   setServo(0,45);
    delay(100);
setServo(0,50);
    delay(100);
    setServo(0,55);
    delay(100);
      setServo(0,60);
    delay(100);
  setServo(0,65);
    delay(100);
    setServo(0,70);
    delay(100);
   setServo(0,75);
  delay(100);
   setServo(0,80);
  delay(100);
    setServo(0,85);
   delay(100);
    delay(2000);
    setServo(0,5);
    
    delay(2000);
    setServo(0,90);
   
  
    delay(2000);
    setServo(0,45);
    
  
    delay(10000);
    
}

Como se puede ver de momento solo estoy trasteando con un servo, el problema que me encuentro es que no se modificar la velocidad a la que se mueve el servo, he probado con Delay pero solo retarda el tiempo que tarda en hacer la siguiente función, la solución que he encontrado es poner los grados de movimiento por ejemplo de 5 en 5 grados con un retardo de 200ms como se puede ver en el codigo, aunque tengo la sospecha que tiene que haber una forma mucho más facil de hacer que el recorrido de 45 grados a 120 por ejemplo lo haga mucho más despacio. Alguien me podría iluminar un poco?

Gracias

usa un bucle for: for - Arduino Reference

Gracias jose por la respuesta, he estado trasteando y he mezclado dos sketchs que he encontrado por ahí, el problema es que con la funcion for no consigo movimiento simultaneo, no se si por que no se hacerlo correctamente o por que, copio y pego el nuevo codigo a ver si alguien me puede indicar que hago mal en el bucle for para que los movimientos no sean simultaneos

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

Adafruit_PWMServoDriver servos = Adafruit_PWMServoDriver(0x40);

unsigned int pos0=172; // ancho de pulso en cuentas para pocicion 0°
unsigned int pos180=565; // ancho de pulso en cuentas para la pocicion 180°
#define SERVOMIN  125 // this is the 'minimum' pulse length count (out of 4096)
#define SERVOMAX  575 // this is the 'maximum' pulse length count (out of 4096)


void setup() {
  servos.begin();  
  servos.setPWMFreq(60); //Frecuecia PWM de 60Hz o T=16,66ms
  
}

void setServo(uint8_t n_servo, int angulo) {
  int duty;
  duty=map(angulo,0,180,pos0, pos180);
  servos.setPWM(n_servo, 0, duty);  
}

void loop() {
  setServo(0,120);
  setServo(1,55);
  setServo(2, 90);
  delay(1000);

 setServo(0,110);
 setServo(1,70);
 setServo(2,85);
 delay(100);

setServo(0,100);
 setServo(1,80);
 setServo(2,80);
 delay(100);

 setServo(0,90);
 setServo(1,90);
 setServo(2,75);
 delay(100);

 setServo(0,80);
 setServo(1,100);
 setServo(2,65);
 delay(100);

setServo(0,70);
 setServo(1,110);
 setServo(2,60);
 delay(100);

 setServo(0,60);
 setServo(1,110);
 setServo(2,50);
 delay(100);
 setServo(0,50);
 setServo(1,110);
 setServo(2,50 );
 delay(100);
  //La secuencia siguiente se usa para mover servos a baja velocidad. 
 // for( int angle =0; angle<120; angle +=1){
  //  delay(50);
  //  servos.setPWM(0, 0, angleToPulse(angle) );
   
  //}
 setServo(0,45);
 setServo(1,120);
 setServo(2,45);
  delay(1000);
    for( int angle =45; angle<120; angle +=1){
   delay(50);
    servos.setPWM(2, 0, angleToPulse(angle) );
    
}
  for( int angle2 =120; angle2<150; angle2 +=1){
   delay(50);
    servos.setPWM(1, 0, angle2ToPulse2(angle2) );
    
}
delay(3000);
}    
  int angleToPulse(int ang){
   int pulse = map(ang,0, 180, SERVOMIN,SERVOMAX);// map angle of 0 to 180 to Servo min and Servo max 
   Serial.print("Angle: ");Serial.print(ang);
   Serial.print(" pulse: ");Serial.println(pulse);
   return pulse;
  }
   int angle2ToPulse2(int ang2){
   int pulse2 = map(ang2,0, 180, SERVOMIN,SERVOMAX);// map angle of 0 to 180 to Servo min and Servo max 
   Serial.print("Angle2: ");Serial.print(ang2);
   Serial.print(" pulse2: ");Serial.println(pulse2);
   return pulse2;
}

Esta seccion de codigo funciona casi correctamente, quiero decir, mueve los servos lentamente a las posiciones indicadas pero lo hace uno a continuación del otro.

   for( int angle =45; angle<120; angle +=1){
   delay(50);
    servos.setPWM(2, 0, angleToPulse(angle) );
    
}
  for( int angle2 =120; angle2<150; angle2 +=1){
   delay(50);
    servos.setPWM(1, 0, angle2ToPulse2(angle2) );

Hay alguna forma de hacer este codigo for para que los movimientos sean simultaneos?

Si quieres mover varios servos simultaneamente y ademas a distinas posiciones, la cosa se complica.Arduino ejecuta los comandos secuencialmente ,por lo que la simultaneidad como tal no existe,lo que se podria hacer es mover un poco cada servo uno tras otro en un bucle ,de manera que parece que actuan juntos.

Un bucle es una repetición hasta que salga la condición por ejemplo:

 for( int angle =45; angle<120; angle +=1){

estas diciendo que el angle es igual a 45 y este mientras se menor 120 osea 119 se va a cumplir y en cada repetición va a ir aumentando de uno en uno el grado por lo que hasta que no acabe esa condición no realizará nada más, por lo que si quieres que sea "secuencial" no puedes utilizar ningún bucle ni delay.
Puedes hacerlo con millis algo parecido como bien explica @IgnoranteAbsoluto en el post #19 del siguiente enlace: usar millis() junto con for() [SOLUCIONADO] en el cual pone un ejemplo el cual mueve un servo sin ningún bucle a un cierto tiempo.

Lo dejo escrito por aquí por si alguien necesita lo mismo que yo que lo pueda encontrar.
Jose con el shield pca9685 de adafruit si se consiguen mover los servos simulaneamente. el problema es controlar la velocidad.
La solucion que he encontrado para que no vaya tan rapido es lo que comentas tu, aunque simplifica bastante el tema, este es el codigo que he usado finalmente con el pca9685 y el codigo que puse más arriba

setServo(0,120);
  setServo(1,55);
  setServo(2, 90);
  delay(1000);

 setServo(0,110);
 setServo(1,70);
 setServo(2,85);
 delay(100);

setServo(0,100);
 setServo(1,80);
 setServo(2,80);
 delay(100);

 setServo(0,90);
 setServo(1,90);
 setServo(2,75);
 delay(100);

 setServo(0,80);
 setServo(1,100);
 setServo(2,65);
 delay(100);

setServo(0,70);
 setServo(1,110);
 setServo(2,60);
 delay(100);

 setServo(0,60);
 setServo(1,110);
 setServo(2,50);
 delay(100);
 setServo(0,50);
 setServo(1,110);
 setServo(2,5

De esta forma se ralentizan los servos lo suficiente para que el movimiento no sea tan brusco.

Swift, gracias por la aclaración, me imaginaba que no habia forma de hacerlo pero le hecho un ojo a ese post.