Go Down

Topic: programmer 2 servos (Read 8924 times) previous topic - next topic

casimir


J'ai refais ça, mais j'ai toujours une erreur
 de plus je ne sais pas comment faire pour copier les messages d'erreurs
Code: [Select]
#include <Servo.h>
Servo myservo1;
Servo myservo2;
int pos = 0;
int poss = 0;

void setup()
{
  myservo1.attach(3);
  myservo2.attach(7);
}
void loop()
{
  pos=90;
  poss=45;
  for(pos = 45; pos < 90; pos += 1)
  for  (poss = 90; poss >= 45; poss -= 1)
{
   myservo1.write(pos);
   myservo2.write(poss);
   pos-=1;
  poss+=1;
   
   delay (20);
   delay (20);
}}
{
 
  poss=90;
  pos=45;
  for(poss = 45; poss < 90; poss += 1)
  for  (pos = 90; pos >= 45; pos -= 1)
   {                                 
   myservo2.write(poss);
   myservo1.write(pos);
   poss-=1;
   pos+=1;
   
   delay (20);
   delay (20);
}}




jfs

#16
Apr 27, 2013, 11:02 am Last Edit: Apr 27, 2013, 11:12 am by Jean-François Reason: 1
Code: [Select]
void loop()
{
 poss=45;
 for(pos = 45; pos < 90; pos += 1)
{
  myservo1.write(pos);
  myservo2.write(poss);
 poss+=1;
 
  delay (20);
 
}

 
 poss=90;
 for  (pos = 90; pos >= 45; pos -= 1)
  {                                
  myservo2.write(poss);
  myservo1.write(pos);
  poss-=1;
 
  delay (20);

}
}

Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

casimir

merci beaucoup c'est trop gentil, je vais essayé et vous dis si ça marche

casimir

Mille mercis!!! ça marche bien j'ai juste enlevé 1 parenthèse après "delay" et rajouté à la fin !
je vais pouvoir  m'amuser ce aprèm

casimir

Re-bonjour, c'est encore moi ! :smiley-red:
depuis le debut de l'aprèm je fais des essais et je suis encore bloqué ! =(
le dernier sketch mes 2 bras bougeaient en même temps avec un mouvement opposé, c'est déjà génial mais je n'arrive pas à faire par exemple 1 bras de 45°à 90° puis de 90° à 45° et l'autre en même temps faire 180° à 0 ° et de 0° à 180°
j'ai fais ça (et pleins d'autres  trucs de ce genre ) mais je ne trouve pas .
avec ce code par exemple mes servos font 45°à 90° puis 180° à 0°
pourriez vous m'aider ?
je vous remercie pour votre patience et votre gentillesse !
Code: [Select]
void loop()
{
  poss=45;
  for(pos = 45; pos < 90; pos += 1)
{
   myservo1.write(pos);
   myservo2.write(poss);
  poss+=1;
   
   delay (20);
   delay (20);
}
{
 
  poss=180;
  for  (pos = 180; pos >= 0; pos -= 1)
   {                                 
   myservo2.write(poss);
   myservo1.write(pos);
   poss-=1;
   
   delay (20);
   delay (20);
   }}}

casimir

j'ai encore essayé ça mais ça ne marche pas j'ai des erreurs.
je suis toujours bloqué et tout se mélange dans ma tête maintenant =(
Code: [Select]
#include <Servo.h>
Servo myservo1;
Servo myservo2;
int pos = 0;
int poss = 0;

void setup()
{
  myservo1.attach(3);
  myservo2.attach(7);
}
void loop()
{
  poss=45;
  for(pos = 45; pos < 90; pos += 1)
{
   myservo1.write(pos);
{

  (pos = 180; pos >= 1; pos += 1)
   {
   myservo2.write(poss);
  poss+=1;
   
   delay (20);
   delay (20);
}}

  {
  poss=1;
  for  (pos = 1; pos <=180; pos -= 1)
   {                                 
   myservo2.write(poss);
  {
   
   (pos = 90; pos >= 45; pos -= 1)
{
   myservo1.write(pos);
   poss-=1;
   
   delay (20);
   delay (20);
   }}}




papybricol

Bonjour,

Intéressante comme question. La réponse m'intéresse aussi.

En utilisant la fonction map:   http://arduino.cc/en/Reference/Map

avec pos1, pour le servo1   et pos2, pour le servo2,
EX: dans la boucle for contrôlée par pos1,  introduire pos2=map(pos1,45,90,180,0) 
(pos2 varie de 180 à 0 pendant que pos1 varie de 45 à 90)
Tu devrais obtenir 1 bras (pos1)de 45°à 90°  et l'autre (pos2) en même temps de 180° à 0 °
à tester....
...ils embarquèrent la logique, coupèrent les cordons, alors, libérés de leurs chaînes, une immensité s'ouvrait devant eux...

casimir

merci Papybricol, je vais essayer et je vous tiens au courant ;)

casimir

ben ça ne marche pas, j'ai certainement mal programmé
les 2 bras font la même chose mais inversé c'est à dire de 45 à 90 puis de 180 à 0
Code: [Select]
pos2=45;
  for(pos1 = 45; pos1 < 90; pos1 += 1)
  pos2=map(pos1,45,90,180,0);
 
{
   myservo1.write(pos1);
   myservo2.write(pos2);
  pos2+=1;
   
   delay (20);
   delay (20);
}
{
 
  pos2=90;
  for  (pos1 = 90; pos1 >= 45; pos1 -= 1)
   {                                 
   myservo2.write(pos2);
   myservo1.write(pos1);
   pos2-=1;
   
   delay (20);
   delay (20);
   }}}


papybricol

#24
Apr 27, 2013, 10:21 pm Last Edit: Apr 27, 2013, 10:30 pm by papybricol Reason: 1


Code: [Select]
for(pos1 = 45; pos1 <= 90; pos1 += 1){
      pos2=map(pos1,45,90,180,0);    // servo1 de 45à 90, servo2 de 180 à 0 
      myservo1.write(pos1);
      myservo2.write(pos2);
     delay (50);
     }
 
delay(1000);
 
for  (pos1 = 90; pos1 >= 45; pos1 -= 1){                                 
       pos2=map(pos1,90,45,0,180);             // servo1 de 90 à 45, servo2 de 0 à 180
       myservo1.write(pos1);
       myservo2.write(pos2);
       delay (50);
     }



1 boucle pour un mouvement et une autre  pour le retour
...ils embarquèrent la logique, coupèrent les cordons, alors, libérés de leurs chaînes, une immensité s'ouvrait devant eux...

casimir

#25
Apr 27, 2013, 10:45 pm Last Edit: Apr 27, 2013, 10:58 pm by amigaêl Reason: 1
merci Paybricol, c'est génial ça marche !!! :)
pour gérer la vitesse, lorsque je chang un paramettre mes 2 servos sont concernés
j'ai essayé ça, mais ça ne marche pas , vous avez une astuce dans votre chapeau ?
merci 'd'avance
Code: [Select]
for(pos1 = 45; pos1 <= 90; pos1 += 1){
      pos2=map(pos1,45,90,180,0);    // servo1 de 45à 90, servo2 de 180 à 0 
      myservo1.write(pos1);
      delay  (20);
      myservo2.write(pos2);
     delay (50);
     }
 
delay(1000);
 
for  (pos1 = 90; pos1 >= 45; pos1 -= 1){                                 
       pos2=map(pos1,90,45,0,180);             // servo1 de 90 à 45, servo2 de 0 à 180
       myservo1.write(pos1);
delay (20);
       myservo2.write(pos2);
       delay (50);
     }

casimir

j'ai fais ça aussi mais ça ne marche pas! =( =( =(
Code: [Select]
for(pos1 = 45; pos1 <= 90; pos1 += 1){
      pos2=map(pos1,45,90,180,0);    // servo1 de 45à 90, servo2 de 180 à 0 
      myservo1.write(pos1);
      myservo2.write(pos2);
      delay (2);
      delay (100);
     }
 
delay(10);
 
for  (pos1 = 90; pos1 >= 45; pos1 -= 1){                                 
       pos2=map(pos1,90,45,0,180);             // servo1 de 90 à 45, servo2 de 0 à 180
       myservo1.write(pos1);
       myservo2.write(pos2);
       delay (2);
       delay (100);
     }}

casimir

Bonjour
je continu à faire des recherches dans mes bouquins, dans mes cours de "mon-club-elec", je fais aussi des essais mais maintenant je me pose la question: est-ce possible ?
Si vous avez une solution elle sera la bienvenu !
en attendant je continu mes recherches et je ne manquerai pas de vous faire part de tout ce que je pourrrai trouver .
bon dimanche à tous

papybricol


pour gérer la vitesse, lorsque je chang un paramettre mes 2 servos sont concernés
j'ai essayé ça, mais ça ne marche pas , vous avez une astuce dans votre chapeau ?


Dans le code que j'ai fourni les 2 servos sont liés par la boucle for du début à la fin du mouvement.
Servo1 tourne de 45°, servo2 de 180°, donc servo2 doit pivoter 4 fois plus vite.

Sois plus précis: quelle gestion précise de la vitesse de chaque servo veux-tu obtenir? Tout en conservant la simultanéité des mouvements?
Tant que tu souhaites la simultanéité (du début à la fin) la vitesse dépend de l'amplitude (de rotation) de chacun par rapport à l'autre.
...ils embarquèrent la logique, coupèrent les cordons, alors, libérés de leurs chaînes, une immensité s'ouvrait devant eux...

casimir

#29
Apr 28, 2013, 03:13 pm Last Edit: Apr 28, 2013, 03:14 pm by amigaêl Reason: 1
bonjour et merci Papy pour votre réponse
ce que je voulais dire si mes 2 servos font en même temps 0°à 180°est-ce possible que mon servo1 fasse 0°à180° et 180°à0°delay (20) et que mon servo en même temps fasse 0°à180°et 180°à0° delay (100)?
merci d'avance

Go Up