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);
}