gérer plusieurs servomoteurs?

Bonsoir,

Je suis débutant en arduino et je réalise simplement quelques montages pour me familiariser avec la programmation et les différents composants. Aujourd'hui j'ai voulu essayer de réaliser un petit montage avec plusieurs servomoteurs;

En branchant 7 servomoteurs sur un arduino mega 2560 (ou plutôt sa copie chinoise SaintSmart) je voulais réaliser une sorte de "hola"de servomoteurs contrôlée par un joystick, seulement pour cela il faut tout d'abord déclarer tous les servomoteurs, puis déclarer les broches auxquelles ils sont rattachés. Pour cela j'ai voulu les numéroter de 1 à 7 avec une boucle for, même chose pour déclarer les broches auxquelles ils sont rattachés, mais sans succès, de ce que j'ai compris il est impossible d'utiliser une fonction for en dehors d'une boucle, et d'utiliser des variables dans les commandes de la bibliothèque <Servo.h>.Utiliser un numéro comme nom de servo semble aussi poser problème.
Connaissez vous un moyen de gérer plusieurs servomoteurs efficacement? ( sans devoir les déclarer un à un à chaque fois)

Je suis désolé de ne pas avoir réussi à exprimer mon problème plus clairement,
Merci de vos réponses.

Voici mon code, et les erreurs obtenues lors de la compilation:

#include <Servo.h>
int x=1;
for (x,x<7,x++){ // déclarer les 7 servos en leur donnant un numéro de 1 à 7 
  Servo x;
  }
 int pinPotentiometre=13; 
 int valPot; 
 int valServo=1;
  
  

void setup() {
  x=1;
  for (x,x<7,x++){ //attacher les 7 servos aux sorties 2 à 8
  x.attach(x+1);
  x.write(10);
  }
  pinMode (pinPotentiometre,INPUT);

}

void loop() {
   valServo.write(10);// remet le servo à 0
  valPot=analogRead(pinPotentiometre); // position du joystick
  valServo= map(valPot,0,1023,1,7);// en déduit le servo à actionner
  valServo.write(170);
  delay(100);

Lors de la compilation:
'

sketch_aug19a:3: error: expected unqualified-id before 'for'
sketch_aug19a.ino: In function 'void setup()':
sketch_aug19a:14: error: expected ';' before ')' token
sketch_aug19a:18: error: could not convert 'pinMode(((uint8_t)pinPotentiometre), 0u)' from 'void' to 'bool'
sketch_aug19a:21: error: expected primary-expression before '}' token
sketch_aug19a:21: error: expected ')' before '}' token
sketch_aug19a:21: error: expected primary-expression before '}' token
sketch_aug19a:21: error: expected ';' before '}' token
sketch_aug19a.ino: In function 'void loop()':
sketch_aug19a:24: error: request for member 'write' in 'valServo', which is of non-class type 'int'
sketch_aug19a:27: error: request for member 'write' in 'valServo', which is of non-class type 'int'
expected unqualified-id before 'for

Bonjour,

Effectivement, for ne peut être utilisé qu'à l'intérieur d'une fonction. De plus les paramètres de for doivent être séparés par ';' et non ','.

Tu peux déclarer un tableau de Servo comme ceci:
Servo s[7];

Pour y accéder:

 s[x].attach(x+1);

Merci beaucoup, cela marche parfaitement avec votre méthode :slight_smile:

Bonjour, je relance ce topic en raison d'un problème approchant.

Voici mon programme :

  • déclaration d'un tableau de 4 servos.
  • dans la fonction setup, j'affecte des sortie à ces 4 servos avec une boucle.
  • dans la fonction loop, j'appelle une fonction position() dont le paramètre est un pointeur de Servo.

Malheureusement, j'obtiens l'erreur suivante, "Arduino : 1.8.2 (Windows 10), Carte : "Arduino Nano, ATmega328"

C:\Users\charl\Documents\01-Robots\Arduino\tst_servo\tst_servo.ino: In function 'void position(Servo*)':
tst_servo:18: error: request for member 'write' in 'servo', which is of pointer type 'Servo*' (maybe you meant to use '->' ?)
*servo.write(90);

^

J'ai essayé avec l'instruction *servo->write(90); mais cela ne fonctionne pas mieux.

Merci d'avance pour votre aide.

#include <Servo.h>

Servo myServo[3]; //tableau de 4 servos

void setup() {
for(int i = 0; i <= 3; i++ ){
myServo[0].attach(i+2); //affectation sortie 2 à 5
}
}

void loop() {
for(int i = 0; i <= 3; i++ ){
position( &myServo );

  • }*
    }
    void position( Servo *servo ){
    _ *servo.write(90);_
    }

Bonjour,

Dans ton code tu déclares un tableau de 3 servos
Pour déclarer un tableau de 4 servos c'est

Servo myServo[4]; //tableau de 4 servos

Pour accéder à toute la table fait

      for(int i = 0; i < 4; i++ ){

au lieu de

      for(int i = 0; i <= 3; i++ ){

C'est plus explicite, bien que le dernier code soit correct