Bonjour, Pb avce des joysticks pour cde servos

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 ).

Dois prendre une carte pour artmega 2560 avec son shield spécifique Grove afin d etre sur de séparer les entrées en en prenant une sur deux ?

Dans ce cas ( et je ne comprend pas très bien l explication ) dois je faire comprendre comme dit sur le site de Lextroni que les 4 sorties analogiques A0 à A3 ne sont pas utilisables de A0 A1 et A2 en même temps avec des joysticks type "console de jeux" ?

En fait avec ce logiciel seule le joystick 2A commande 3 servos à lui tout seul en le tournant en rond de X vers Y et inverse de facon illogique

En fait le programme n est que la répétition de la commande de 6 entrées Joystick (3 en tout) en sortie sur 6 servomoteurs de bras robotique. Rien de plus simple: Mais un vrai casse tête pour moi !

Merci de votre attention et de votre aide à l avance

En tout cas voici le listing complet de mon programme
J avis essayé de faire moins long avec des boucles "for" mais le resultat etait pire ... les seuils de détection de mouvements et de position de srvos etants différents les uns des autres

Voici les liens des shields utilisés:
Arduino; Uno
http://www.seeedstudio.com/wiki/Grove-Base_Shield_V1.3
http://www.seeedstudio.com/wiki/Grove_-_Thumb_Joystick

// --- 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 ---

int angle_Servo[6] = {90,90,90,90,90,90} ; // variable pour angle du Servomoteur

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

// --- Déclaration des objets utiles pour les fonctionnalités utilisées ---
Servo mon_Servo[6]; // crée un objet Servo pour contrôler le Servomoteur

//**************** 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 ---

int i=0; // Incrément boucle des 6 Servos et 6 entrées joystick

for (int i=0;i<=5;i++) { // Prépare les Servos au milieu pour commencer
mon_Servo*.attach((i+6), POS_MIN, POS_MAX); // attache l'objet Servo à la broche de commande du Servomoteur 0 à 6*
mon_Servo.write(angle_Servo*); } // Place les Servos au milieu*

* pinMode(A0, INPUT); //met ls broches des joysticks en entrée*
* pinMode(A1, INPUT);*
* pinMode(A2, INPUT);*
* pinMode(A3, INPUT);*
* pinMode(A4, INPUT);*
* pinMode(A5, INPUT);*

* pinMode((3), OUTPUT); // Pins PVM en sortie servos*
* pinMode((5), OUTPUT);*
* pinMode((6), OUTPUT);*
* pinMode((9), OUTPUT);*
* pinMode((10), OUTPUT);*
* pinMode((11), OUTPUT);*
*// ------- 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 0
variation_corrigee = map(analogRead(A0),0,1024,-20,20); // corrige la variation de mouvement
variation_corrigee = variation_corrigee + 9 ;
if ((variation_corrigee<-5) || (variation_corrigee>4)) {

* angle_Servo[0] = angle_Servo[0] + variation_corrigee ; // Angle Servo demandé*
* mon_Servo[0].attach((3), POS_MIN, POS_MAX);
_// attache l'objet Servo à la broche de commande du Servomoteur*
* mon_Servo[0].write(angle_Servo[0]); // positionne le Servo à l'angle voulu si dans les plages voulues*
* }
if (angle_Servo[0]<20) { angle_Servo[0]=20; }
if (angle_Servo[0]>160) { angle_Servo[0]=160; }
// Servo 1*_

variation_corrigee = map(analogRead(A1),0,1024,-20,20); // corrige la variation de mouvement
variation_corrigee = variation_corrigee + 9 ;
if ((variation_corrigee<-5) || (variation_corrigee>4)) {

* angle_Servo[1] = angle_Servo[1] + variation_corrigee ; // Angle Servo demandé*
* mon_Servo[1].attach((5), POS_MIN, POS_MAX);
_// attache l'objet Servo à la broche de commande du Servomoteur*
* mon_Servo[1].write(angle_Servo[1]); // positionne le Servo à l'angle voulu si dans les plages voulues*
* }
if (angle_Servo[1]<20) { angle_Servo[1]=20; }
if (angle_Servo[1]>160) { angle_Servo[1]=160; }
// Servo 2*_

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_Servo[2] = angle_Servo[2] + variation_corrigee ; // Angle Servo demandé*
* mon_Servo[2].attach((6), POS_MIN, POS_MAX);
_// attache l'objet Servo à la broche de commande du Servomoteur*
* mon_Servo[2].write(angle_Servo[2]); // positionne le Servo à l'angle voulu si dans les plages voulues*
* }
if (angle_Servo[2]<20) { angle_Servo[2]=20; }
if (angle_Servo[2]>160) { angle_Servo[2]=160; }
// Servo 3*_

variation_corrigee = map(analogRead(A3),0,1024,-20,20); // corrige la variation de mouvement
variation_corrigee = variation_corrigee + 7 ;
if ((variation_corrigee<-1) || (variation_corrigee>2)) {

* angle_Servo[3] = angle_Servo[3] + variation_corrigee ; // Angle Servo demandé*
* mon_Servo[3].attach((9), POS_MIN, POS_MAX);
_// attache l'objet Servo à la broche de commande du Servomoteur*
* mon_Servo[3].write(angle_Servo[3]); // positionne le Servo à l'angle voulu si dans les plages voulues*
* }
if (angle_Servo[3]<20) { angle_Servo[3]=20; }
if (angle_Servo[3]>160) { angle_Servo[3]=160; }
// Servo 4*_

variation_corrigee = map(analogRead(A4),0,1024,-20,20); // corrige la variation de mouvement
variation_corrigee = variation_corrigee + 7 ;
if ((variation_corrigee<-1) || (variation_corrigee>-0)) {

* angle_Servo[4] = angle_Servo[4] + (variation_corrigee/2) ; // Angle Servo demandé*
* mon_Servo[4].attach((10), POS_MIN, POS_MAX);
_// attache l'objet Servo à la broche de commande du Servomoteur*
* mon_Servo[4].write(angle_Servo[4]); // positionne le Servo à l'angle voulu si dans les plages voulues*
* }
if (angle_Servo[4]<20) { angle_Servo[4]=20; }
if (angle_Servo[4]>160) { angle_Servo[4]=160; }
// Servo 5*_

variation_corrigee = map(analogRead(A5),0,1024,-20,20); // corrige la variation de mouvement
variation_corrigee = variation_corrigee + 8 ;
if ((variation_corrigee<-1) || (variation_corrigee>2)) {

* angle_Servo[5] = angle_Servo[5] + variation_corrigee ; // Angle Servo demandé*
* mon_Servo[5].attach((11), POS_MIN, POS_MAX);
_// attache l'objet Servo à la broche de commande du Servomoteur*
* mon_Servo[5].write(angle_Servo[5]); // positionne le Servo à l'angle voulu si dans les plages voulues*
* }
if (angle_Servo[5]<20) { angle_Servo[5]=20; }
if (angle_Servo[5]>160) { angle_Servo[5]=160; }
delay(50);
}
// fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin*
// ********************************************************************************
// --- Fin programme ---_