2 servos en simultanés

Bonjour et merci pour toutes les informations que l'on trouve sur le forum ...du bonheur !!
Je début à peine dans le monde fabuleux de l'Arduino...et j'adore.
Pour mon projet en cours, la fusée de Tintin en 2m de haut, je me suis dit qu'un peu de son, un peu de mouvement serait les bien venu...alors quoi de mieux que l'Arduino !!!
J'ai réussi a l'aide de la télécommande IR a lancer des sons...a allumer et éteindre des leds...
Mais la je bloque pour les servos qui commandent l'ouverture/fermeture des portes de la partie SAS.
Ces deux servos fonctionnent en opposé...et mon programme marche bien mais...les portes fonctionnent l'une après l'autre...et j'aimerais qu'elles fonctionnent en simultanée...
Je pense qu'il y a pas grand chose a changer dans mon programme...mais je bloque depuis plusieurs heures !!!
Vos idées seront les bienvenues !!!

> #include <Servo.h>
> 
> Servo myservo1;
> Servo myservo2;
> int pos = 0;    
> int pos2 = 150;
> 
> void setup() {
>   myservo1.attach(8);
>   myservo2.attach(9);// attaches the servo on pin 9 to the servo object
> }
> void loop() {
>   for (pos = 0; pos <= 150; pos += 1){
>     myservo1.write(pos);
>     delay(25);
>   }
>   for (pos2 = 150; pos2 >=0; pos2 -= 1){ 
>     myservo2.write(pos2);
>     delay(25);
>   }
>     delay(4000);
>    for (pos = 150; pos >= 0; pos -= 1){
>     myservo1.write(pos);
>     delay(25);
>    }
>    for (pos2 = 0; pos2 <= 150; pos2 += 1){ 
>     myservo2.write(pos2);
>     delay(25);                  
>   }
>    delay(2000);
>    }

Bonjour modelise113

Change de bibliothèque, utilises VarSpeedServo, il y a un mode non bloquant, plus d'autres avantage comme le réglage de la vitesse.

Cordialement
jpbbricole

Merci, je vais tester cela.

Bonjour

Il faudrait surtout changer le code
ils fonctionnent l un apres l autre car le code est fait pour qu ils fonctionnent l un apres l autre

Ecrire le code des deux servos dans une seule boucle et calculer la position du deuxieme a partir de la position du premier
Pos2 =150 - pos1 par exemple

Bonjour

En me basant sur ce que tu avais déjà écrit,
peut-être comme ça :

#include <Servo.h>
 
Servo myservo1;
Servo myservo2;
int pos = 0;    
int pos2 = 150;
 

void setup() {
  myservo1.attach(8);
  myservo2.attach(9); // attaches the servo on pin 9 to the servo object
}


void loop() {

  pos2 = 150;
  for (pos = 0; pos <= 150; pos -= 1){
    myservo1.write(pos);
    myservo2.write(pos2);
    pos2 -= 1;
    delay(25);
  }

  delay(4000);

  // ils ont finit en position 150 et 0, alors je les fais continuer par 149 et 1
  pos2 = 1;
  for (pos = 149; pos >= 0; pos -= 1){
    myservo1.write(pos);
    myservo2.write(pos2);
    pos2 += 1;
    delay(25);
  }

  delay(2000);

}

Bonjour modelise113

Dans les méthodes

write(value, speed, wait) - wait is a boolean that, if true, causes the function call to block until move is complete

si wait est à false, tu peux démarrer tes 2 servo de suite et il fonctionnent en même temps.
Ainsi, ça:

	   for (pos = 0; pos <= 150; pos += 1){
		     myservo1.write(pos);
		     delay(25);
	   }
	   for (pos2 = 150; pos2 >=0; pos2 -= 1){
		     myservo2.write(pos2);
		     delay(25);
	   }

devient:

myservo1.write(150, 100, false);
myservo2.write(150, 100, false);

Reste plus qu'à régler la vitesse, le 100 actuellement.

Quand même plus simple :wink:

Cordialement
jpbbricole

1 Like

Bon la crise, 10 minutes que je peste après ton code...et c'est un servo qui avait cramé...pffff...
Mais du coup ça marche du tonnerre !!!!
Milles merci !!!

Je me suis "débrouillé" pour faire ça en utilisant ce que tu avais déjà écrit, mais il est évident que le code serait beaucoup simple et aéré en utilisant la bibliothèque VarSpeedServo proposée par jpbbricole dans son message #2.

je vais tester aussi !!! merci

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.