como controlar 3 servos en simultaneo a diferentes velocidades -> millis

Holaaaa! estoy armando un proyecto donde necesito mover 3 servos a diferentes velocidad independiente uno de otro.
Hasta ahora se mueven los 3 juntos pero a la misma velocidad.
¿Cómo debería modificar el código para poder variar las velocidades de cada uno de los servos de forma independiente? ya trasnoche demasiado sin lograrlo jajaj

¡¡¡¡¡Gracias!!!

#include <Servo.h>

const unsigned long TIEMPO_INCREMENTO = 20;
const int ANGULO_MINIMO = 0;
const int ANGULO_MAXIMO = 180;
const int PIN_SERVO = 9;

unsigned long instanteAnterior = 0;
int angulo = ANGULO_MINIMO;
int incremento = -1;

Servo servo1;     
 
int PINSERVO = 2;   
int PULSOMIN = 650;    
int PULSOMAX = 2600;    

Servo servo2;  
                                       
int PINSERVO2 = 3;   
int PULSOMIN2 = 650;    
int PULSOMAX2 = 2600;  

Servo servo3;  
                                        
int PINSERVO3 = 4;   
int PULSOMIN3 = 650;    
int PULSOMAX3 = 2600;   



void setup() {
  servo1.attach(PINSERVO, PULSOMIN, PULSOMAX);
  servo2.attach(PINSERVO2, PULSOMIN2, PULSOMAX2);
  servo3.attach(PINSERVO3, PULSOMIN3, PULSOMAX3);
}

void loop() {
    unsigned long instanteActual = millis();
    if( (instanteActual - instanteAnterior) >= TIEMPO_INCREMENTO ) {
        instanteAnterior = instanteActual;
        if ( (angulo <= ANGULO_MINIMO) || (angulo >= ANGULO_MAXIMO) ) 
        {
            incremento = -incremento;
        }
        angulo += incremento;
        servo1.write(angulo); 
        servo2.write(angulo);
        servo3.write(angulo);
                     
    }
}

Antes que nada, no está permitido por las reglas del foro poner Ayuda en el asunto del tema, por favor editalo.

Vamos al problema.
Yo definiría TIEMPO_INCREMENTO (con tiempos distintos, obviamente), instanteAnterior, incremento y angulo, para cada servo (le agregas un numero como hiciste con cada pinservo, por ej.)

Y haría una comparación para cada servo.

Intenta hacerlo solo (es de lo más simple, copias, pegas y pones el número correspondiente a cada servo donde haga falta).

Saludos

Pd: te sugiero que a las variables asociadas a servo1 les agregues el 1 así evitas confusiones y seguís la regla que usaste para los otros 2 (que les pusiste 2 y 3).
Tené en cuenta que los nombres de variables van en minúsculas y solo las constantes en mayúsculas, así todos entendemos mejor.

Genial! funciono perfecto gracias! el código quedo así:

#include <Servo.h>

const unsigned long TIEMPO_INCREMENTO1 = 20;
const unsigned long TIEMPO_INCREMENTO2 = 10;
const unsigned long TIEMPO_INCREMENTO3 = 30;

const int ANGULO_MINIMO = 0;
const int ANGULO_MAXIMO = 180;
const int PIN_SERVO = 9;

unsigned long instanteAnterior1 = 0;
unsigned long instanteAnterior2 = 0;
unsigned long instanteAnterior3 = 0;


int angulo1 = ANGULO_MINIMO;
int angulo2 = ANGULO_MINIMO;
int angulo3 = ANGULO_MINIMO;

int incremento1 = -1;
int incremento2 = -1;
int incremento3 = -1;

Servo servo1;     
 
int PINSERVO = 2;   
int PULSOMIN = 650;   
int PULSOMAX = 2600;   

Servo servo2; 
                                       
int PINSERVO2 = 3;   
int PULSOMIN2 = 650;   
int PULSOMAX2 = 2600; 

Servo servo3; 
                                       
int PINSERVO3 = 4;   
int PULSOMIN3 = 650;   
int PULSOMAX3 = 2600;   



void setup() {
  servo1.attach(PINSERVO, PULSOMIN, PULSOMAX);
  servo2.attach(PINSERVO2, PULSOMIN2, PULSOMAX2);
  servo3.attach(PINSERVO3, PULSOMIN3, PULSOMAX3);
}

void loop() {
    unsigned long instanteActual = millis();

    if( (instanteActual - instanteAnterior1) >= TIEMPO_INCREMENTO1 ) {
        instanteAnterior1 = instanteActual;
        if ( (angulo1 <= ANGULO_MINIMO) || (angulo1 >= ANGULO_MAXIMO) )
        {
            incremento1 = -incremento1;
        }
        angulo1 += incremento1;
        servo1.write(angulo1);               
    }

    //Servo 2

    if( (instanteActual - instanteAnterior2) >= TIEMPO_INCREMENTO2 ) {
        instanteAnterior2 = instanteActual;
        if ( (angulo2 <= ANGULO_MINIMO) || (angulo2 >= ANGULO_MAXIMO) )
        {
            incremento2 = -incremento2;
        }
        angulo2 += incremento2;
        servo2.write(angulo2);               
    }

    //Servo 3
    
   if( (instanteActual - instanteAnterior3) >= TIEMPO_INCREMENTO3 ) {
        instanteAnterior3 = instanteActual;
        if ( (angulo3 <= ANGULO_MINIMO) || (angulo3 >= ANGULO_MAXIMO) )
        {
            incremento3 = -incremento3;
        }
        angulo3 += incremento3;
        servo3.write(angulo3);               
    }

    
}

¡Excelente!
Y gracias por editar el título. :wink:

Saludos