Go Down

Topic: commande 2 servo different (Read 1 time) previous topic - next topic

cyril

Jan 31, 2010, 10:54 am Last Edit: Jan 31, 2010, 10:56 am by cyril Reason: 1
bonjour.
je début avec l'Arduino et en programmation aussi d'ailleur :)
Je Voudrais piloter 2 servo indépendamment l'un de l'autre.

Avec Plusieurs essais j'ai réussi a faire ce code



# Include <Servo.h>

Préciser INCR # 1

Servo servo1, servo2;

int angle = 0;
Sens int = 0;

void setup ()
(
servo1.attach (9);
servo2.attach (8);
)

void loop ()
(

if (sens == 0)
(
angle + = incr;
)
else (
-= INCR Angle;
)

if (angle == 0)
(
Sens = 0;
)
if (angle == 90) (
Sens = 1;
)
delay (100);
servo1.write (angle);
servo2.write (angle);
)


J'arrive a piloter mes 2 servo, mais Je Voudrais pouvoir gérer la vitesse de rotation, et l'angle de rotation de Chacun a des valeur différentes.
J'espère que je suis assez clair : -?

Il Faut commentaire »Que Je Fasse?
merci d'avance de votre aide :)

Luj06

Il te suffit de gérer deux variables : angle1 et angle2, et de gérer deux constantes INCR1 et INCR2.

cyril

merci de ta réponse.
tu pourrais me donné un exemple sans vouloir abusé  :-?
merci

Luj06

Ici je contrôle deux servos : http://www.pobot.org/Controle-avec-un-Wii-Nunchuck.html avec valX et valY.

cyril

#4
Jan 31, 2010, 01:21 pm Last Edit: Jan 31, 2010, 03:42 pm by cyril Reason: 1
merci
je début vraiment et j'ai du mal a comprendre comment intégrer a mon code 2 variable... ca doit pas être compliqué mais je bloque  >:(

tu pourrais me montrais comment faire sur mon code joint a mon premier post?
j'espère ne pas trop abusé  :-[

Luj06

#5
Jan 31, 2010, 05:09 pm Last Edit: Jan 31, 2010, 05:11 pm by julien@pobot.org Reason: 1
Code: [Select]

#include <Servo.h>

#define INCR1 1
#define INCR2 2

Servo servo1, servo2;

// les consignes de position
int cons1 = 0;
int cons2 = 0;

// l'angle courant
int angle1=0;
int angle2 = 0;

void setup ()
{
 // les deux servos
 servo1.attach(9);
 servo2.attach(10);
 // pour test, on veut atteindre la position médiane des 2 servos
 cons1 = 90;
 cons2 = 90;
 // on commence à une extrémité
 servo1.write(0);
 servo2.write(0);
 // et on attend que les servos se positionnent
 delay(600);
}

void loop ()
{
 // si on est en dessous de la position de consigne
 if (angle1 < cons1)
 {
   angle1+=INCR1;
 } // si on est au dessus
 else if (angle1 > cons1) {
   angle1-=INCR1;
 }  
 // sinon rien à faire


 // si on est en dessous de la position de consigne
 if (angle2 < cons2)
 {
   angle2+=INCR2;
 } // si on est au dessus
 else if (angle2 > cons2) {
   angle2-=INCR2;
 }  
 // sinon rien à faire

 servo1.write(angle1);
 servo2.write(angle2);

 delay (100);
}


note: l'incrément 2 étant supérieur à l'unité, ce code va dépasser la position de consigne puis osciller autour : il faudrait faire un test plus précis, si on est entre cons2 +/- INCR2.

(au passage je trouve étonnant d'avoir écrit plus haut un code incorrect, tu aurais pu au moins l'écrire correctement syntaxiquement, à défaut qu'il soit exact fonctionnellement).

cyril

merci beaucoup
je suis désoler d'avoir écrit un code incorrect, je l'es mis car il marché avec mes 2 servo.
j'ai encore beaucoup de boulot avant de savoir bien servir.

merci beaucoup

Go Up