Bonjour, Pb avce la fonction detach() pour servos

Bonjour

J ai un pb avec la fonction ".detach()"dans une application faisant appel a des servo moteurs

J essaye d"élaborer un système de commande pour bras robotique DAGU à 6 degrés de liberté: controlé par 3 joysticks "XY"

Pour donner un exemple de la fonction dont j aimerai pouvoir faire l appel :

  • la base est un servo moteur
  • commandé par une arduino uno sous une base shield Grove v1.3 supportant 3 joysticks de A0 à A3 analogique, sous un shield pour arduino SKU DFR0265 pour controler les servo moteurs

Après une routine de detection de déplacement d un joystick en X ou Y du 3 e Servo ( le n°2 pae ex. ) je voudrai détacher la sortie servo de cette servitude pour passer a la routine suivante.

Mais la cde "detach" n est pas reconnue

Voici un listing symplifié au maxi d une partie de mon programme qui ne compile pas

la ligne en rouge ne passe pas. J ai essayé toutes les combinaisons possibles de perentaises et declarations mais cela ne fonctionne pas. Pourtant j ai utilisé la fonction comme décrite pour la librairie Servos décrite dans mes livres de programmation. ( je débute en fait un peu ).

La ligne en rouge indiqu e le bug

pourriez vous m iader svp ?


// --- Programme Arduino ---

// --- Que fait ce programme ? ---
// Positionne 6 Servomoteurs à l'aide de joystick faisant office de resistance variable
// --- Fonctionnalités utilisées ---
// Utilise la conversion analogique numérique 10bits sur les voies analogiques analog 0 à 5,
// Utilise les Servomoteurs en sorties analogiques PVM pour Arduino Uno

// --- Circuit à réaliser ---

// Connecter sur les broches PVM (configurée en sortie) les broches de commande de 6 Servomoteurs.
// Broche Analog 0 à 5(=broche 0 à 5) en entrée Analogique :
// connecter la sortie de 3 joysticks x/y résistance variable de 0 à 10k ohms connectée entre entrée et 5V.
// externes

//**************** Entête déclarative *******
// A ce niveau sont déclarées les librairies, les constantes, les variables...

// --- Inclusion des librairies utilisées ---

#include <Servo.h> // librairie pour Servomoteur

// --- Déclaration des constantes ---
const int POS_MIN=210; // largeur impulsion pour position 0° Servomoteur
// POS_MIN=400 pour Servo
const int POS_MAX=795; // largeur impulsion pour position 180° Servomoteur

// --- Déclaration des variangle_Servoables globales ---es des broches ---
// POS_MAS=1900 pour Servo
int angle_Servo2 = 90 ; // variable pour angle du Servomoteur

Servo mon_Servo2;

int variation_corrigee = 0 ; // variation du joystick atténuée

// --- Déclaration des objets utiles pour les fonctionnalités utilisées ---

//**************** FONCTION SETUP = Code d'initialisation *****
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme

void setup() { // debut de la fonction setup()

// --- ici instructions à exécuter au démarrage ---

mon_Servo2.attach((5), POS_MIN, POS_MAX); // attache l'objet Servo à la broche de commande du Servomoteur 0 à 6
pinMode((5), OUTPUT); // Place les Servos 7 à 12 en sortie
mon_Servo2.write(angle_Servo2); // Place les Servos au milieu
// ------- Broches en entrée -------

// ------- Activation du rappel au + interne des broches en entrée si nécessaire -------

} // fin de la fonction setup()
// ********************************************************************************

//*************** FONCTION LOOP = Boucle sans fin = coeur du programme *************
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension

void loop() {
// debut de la fonction loop()

// --- ici instructions à exécuter par le programme principal ---

// acquisition conversion analogique numérique (100µs env.)

// effectue les operatiosn sur les 6 seervos
// Servo 2
pinMode(A2, INPUT); //met la broche du joystick en entrée

variation_corrigee = map(analogRead(A2),0,1024,-20,20); // corrige la variation de mouvement
variation_corrigee = variation_corrigee + 8 ;

if ((variation_corrigee<0) || (variation_corrigee>0)) {

angle_Servo2 = angle_Servo2 + variation_corrigee ; // Angle Servo demandé
pinMode((6), OUTPUT);
mon_Servo2.attach((6), POS_MIN, POS_MAX);
// attache l'objet Servo à la broche de commande du Servomoteur

mon_Servo2.write(angle_Servo2); // positionne le Servo à l'angle voulu si dans les plages voulues
}
if (angle_Servo2<20) { angle_Servo2=20; }
if (angle_Servo2>160) { angle_Servo2=160; }

mon_Servo2.detach(6);

}

Il est inutile de détacher un servo après chaque opération.
De même qu'il est inutile de le rattacher avant de lui envoyer une commande.
On fait une fois attach dans le setup() et ensuite on ne change rien.

Merci pour votre réponse

Mais comment se fait il qu il y ai des interférences entre joysticks sur le shield grove v1.3 entre les connecteurs analogiques A0 à A2 comme j en ai:
Malgré mes bons paramétrages d'E/S des action sur les joysticks ont des effets assez bizarres ( commandes d autres servos que ceux ddés, pas d action du tout ).