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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy