Hola a todos, es la primera vez que participo, espero no hacerlo mal.
Estoy tratando de mover dos servos, uno para vertical y otro para horizontal, de forma sincronizada.
Les paso las variables de los valores "HORIZONTAL", "VERTICAL" y "VELOCIDAD" respectivamente y para la sincronización he anidado un ciclo FOR dentro de otro, para poder dar valores diferentes a cada uno de los dos servos.
La intención era que antes de terminar uno de los ciclos lo fuera combinando con el otro.
Lo cierto es que no funciona como esperaba, primero mueve todo el ciclo de un servo y luego el otro ciclo del otro servo.
¿Me podéis ayudar con esto?
Gracias.
void servos(float h, float v, float s){ // La función recibe valores para posición horizontal, vertical y velocidad
int h_calc = h*((h_max-h_min)/100)+h_min; //Hallamos un valor de h porcentual convertido a posición del servo horizontal
int v_calc = v*((v_max-v_min)/100)+v_min; //Hallamos un valor de v porcentual convertido a posición del servo vertical
if(h_actual <= h_calc && v_actual <= v_calc) // Verificamos si la posición objetivo es mayor que la actual para horizontal y vertical
{
for(int nh = h_actual; nh <= h_calc; nh +=1){
for(int nv = v_actual; nv <= v_calc; nv +=1){
servo_h.write(nh);
servo_v.write(nv);
h_actual = nh;
v_actual = nv;
delay(s);
}
}
}else if(h_actual <= h_calc && v_actual >= v_calc) // Verificamos si la posición objetivo es mayor que la actual para horizontal y menor para vertical
{
for(int nh = h_actual; nh <= h_calc; nh +=1){
for(int nv = v_actual; nv >= v_calc; nv -=1){
servo_h.write(nh);
servo_v.write(nv);
h_actual = nh;
v_actual = nv;
delay(s);
}
}
}else if(h_actual >= h_calc && v_actual >= v_calc) // Verificamos si la posición objetivo es menor que la actual para horizontal y vertical
{
for(int nh = h_actual; nh >= h_calc; nh -=1){
for(int nv = v_actual; nv >= v_calc; nv -=1){
servo_h.write(nh);
servo_v.write(nv);
h_actual = nh;
v_actual = nv;
delay(s);
}
}
}else if(h_actual >= h_calc && v_actual <= v_calc) // Verificamos si la posición objetivo es menor que la actual para horizontal y mayor para vertical
{
for(int nh = h_actual; nh >= h_calc; nh -=1){
for(int nv = v_actual; nv <= v_calc; nv +=1){
servo_h.write(nh);
servo_v.write(nv);
h_actual = nh;
v_actual = nv;
delay(s);
}
}
}
delay(100);
}