ACTIONNER 2 SERVOMOTEURS EN SIMULTANÉ DANS UN SENS OPPOSÉ

Bonjour à tous,

Je rencontre quelques difficultés de débutant depuis quelques jours. J’essai de coder pour faire tourner deux servomoteurs de manière simultané : l’un dans un sens et l’autre dans le sens opposé.

Tant bien que mal, j’arrive à les faire tourner comme je veux mais pas en SIMULTANÉ : ils enchainent les opérations l’un après l’autre (le servo1 va de 0° à 180° et de 180° à 0° et SEULEMENT APRÈS le servo2 s’exécute dans le sens inverse) au lieu de s’actionner en même temps… !

#include <Servo.h> 
 
Servo myservo;
Servo myservo2;
               
 
int pos = 0; 
int pos2 = 180;  
 
void setup() 
{ 
  myservo.attach(9);
  myservo2.attach(6);  
} 
 
 
void loop() 
{ 
  for(pos = 0; pos < 180; pos += 1)  
  {                                 
    myservo.write(pos);            
    delay(15);                      
  } 
  for(pos = 180; pos>=1; pos-=1)      
  {                                
    myservo.write(pos);            
    delay(15);                     
  } 
  for(pos2 = 180; pos2 >=1; pos2 -=1)    
  {                                
    myservo2.write(pos2);              
    delay(15);                      
  } 
     for(pos2 = 0; pos2 < 180; pos2 += 1) 
  {                                  
    myservo2.write(pos2);              
    delay(15);                        
  } 
  
 }

Quelqu’un aurait-il une solution ?

Merci beaucoup !!! :slight_smile:
Bonne journée,
J.

Delay est une fonction bloquante. Utilise plutôt millis().

C’est noté pour millis()! :slight_smile:

Après plusieurs recherches sur internet, le problème persiste. J’ai également testé ce code là qui contient le même problème : en fait, il faut faire en sorte que la void loop active les deux en même temps et non pas l’un après l’autre.

#include <Servo.h> 
 
Servo myservo;
Servo myservo2;
               
int pos = 0;  
 
void setup() 
{ 
  myservo.attach(9);
  myservo2.attach(6);  
} 

void loop() {           
  forward();             
  reverse();
}

void forward()
{ 
  for(pos = 0; pos < 180; pos += 1)
    { 
       myservo.write(pos);
       delay(15);
    }
  for(pos = 180; pos > 0; pos -=1)
    { 
       myservo.write(pos);
       delay(15);
    }
}
    
void reverse()
{ 
  for (pos = 180; pos > 0; pos -=1)
    { 
       myservo2.write(pos);
       delay(15);
    }
  for(pos = 0; pos < 180; pos += 1)
    { 
       myservo2.write(pos);
       delay(15);
    }
}

Bref, encore merci si vous avez des solutions!!!

bonjour, tu peux inverser le montage d'un servo par rapport à l'autre. comme ca, ils vont dans le même sens mais en opposé après montage.

et un code style

void reverse()
{
  for (pos = 180; pos > 0; pos -=1)
    {
       myservo.write(pos);
       myservo2.write(pos);
       delay(15);
    }

Bonjour,

infobarquee:
tu peux inverser le montage d’un servo par rapport à l’autre.
comme ca, ils vont dans le même sens mais en opposé après montage.

ou bien

for(pos = 0; pos < 180; pos += 1)
  {
    myservo.write(pos);
    myservo2.write(180 - pos);
    delay(15);
  }
1 Like

Ça marche!!! Merci.. BEAUCOUP