Go Down

Topic: ACTIONNER 2 SERVOMOTEURS EN SIMULTANÉ DANS UN SENS OPPOSÉ (Read 1 time) previous topic - next topic

ZabZab

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.. !

Code: [Select]
#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 !!!  :)
Bonne journée,
J.

solfra

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

ZabZab

C'est noté pour millis()!  :)


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.

Code: [Select]
#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!!!

infobarquee

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
Code: [Select]
void reverse()
{
  for (pos = 180; pos > 0; pos -=1)
    {
       myservo.write(pos);
       myservo2.write(pos);
       delay(15);
    }
AUCUNE AIDE PAR MP

fablath

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.
ou bien

Code: [Select]

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

ZabZab


Go Up