Salut Jeffrey,
Je viens vers toi car j’ai élaboré un code pour faire fonctionner 2 servomoteurs dirigés par un joystick. Je souhaiterais pouvoir controler la vitesse de rotation des servos à partir de deux potentiomètres mais je n’arrive pas à l’adapter à mon code. J’ai pu voir que cela était possible comme sur cette vidéo youtube.com/watch?v=qWAcJ2ZDcfk où il indique son code mais je n’arrive à l’adapter à mon code.
Merci de ton aide
[code]#include <Servo.h> // librairie pour servomoteur
// — Déclaration des constantes utiles —
const int APPUI=LOW; // constante pour tester état BP
//— Constantes utilisées avec le servomoteur
const int ANGLE_MIN=0; // angle position MIN en degrés
const int POS_MIN=550; // largeur impulsion pour position ANGLE_MIN degrés du servomoteur
// par exemple POS_MIN=600 pour ANGLE_MIN=10° avec un futaba S3003
// ou POS_MIN=550 pour ANGLE_MIN=0 avec un futaba S3003
const int ANGLE_MAX=172; // angle position MAX en degrés
int POS_MAX=2400; // largeur impulsion pour position ANGLE_MAX degrés du servomoteur
// POS_MAS=2300 pour ANGLE_MIN=170° pour futaba s3003
// ou POS_MAX=2400 pour ANGLE_MAX=172 pour futaba S3003
const int broche_servoPan=6; // Constante pour la broche 8
const int broche_servoTilt=7; // Constante pour la broche 8
// — Déclaration des constantes des broches analogiques —
const int axe1Joystick=A2; // Constante pour la broche analogique 0
const int axe2Joystick=A3; // Constante pour la broche analogique 1
// — Déclaration des variables globales —
int mesure_brute=0;// Variable pour acquisition résultat brut de conversion analogique numérique
float mesuref=0.0;// Variable pour calcul résultat décimal de conversion analogique numérique
int positionAxe1=0; // Variable pour acquisition résultat brut de conversion analogique numérique axe 1 Joystick
int positionAxe2=0; // Variable pour acquisition résultat brut de conversion analogique numérique axe 2 Joystick
int angleServoPan=90; // variable de position du servo Pan en degrés
int angleServoTilt=90; // variable de position du servo Tilt en degrés
int angleServoPan0=90; // variable de la dernière position du servo Pan en degrés
int angleServoTilt0=90; // variable de la dernière position du servo Tilt en degrés
// — Déclaration des objets utiles pour les fonctionnalités utilisées —
//— Création objet servomoteur
Servo mon_servoPan; // crée un objet servo pour contrôler le servomoteur 1
Servo mon_servoTilt; // crée un objet servo pour contrôler le servomoteur 2
// ////////////////////////// 2. 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 1 seule fois au démarrage du programme —
// ------- Initialisation fonctionnalités utilisées -------
//— Initialisation Servomoteur
mon_servoPan.attach(broche_servoPan); // attache l’objet servo à la broche de commande du servomoteur Pan
mon_servoTilt.attach(broche_servoTilt); // attache l’objet servo à la broche de commande du servomoteur Tilt
// ------- Broches en sorties numériques -------
pinMode (broche_servoPan,OUTPUT); // Broche broche_servoPan configurée en sortie
pinMode (broche_servoTilt,OUTPUT); // Broche broche_servoPan configurée en sortie
// ------- Activation si besoin du rappel au + (pullup) des broches en entrées numériques -------
// Les BP du shield Joystick + BPx2 dispose d’un rappel au plus sur le shield
// ------- Initialisation des variables utilisées -------
// ------- Codes d’initialisation utile -------
mon_servoPan.writeMicroseconds(angle(angleServoPan)); // crée impulsion à partir valeur angle - plus précis que write()
mon_servoTilt.writeMicroseconds(angle(angleServoTilt)); // crée impulsion à partir valeur angle - plus précis que write()
delay(200);
} // fin de la fonction setup()
// ********************************************************************************
////////////////////////////////// 3. 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()
//----- lecture position Joytstick
positionAxe1=analogRead(axe1Joystick); // acquisition conversion analogique numérique sur broche analogique axe 1
positionAxe2=analogRead(axe2Joystick); // acquisition conversion analogique numérique sur broche analogique axe 2
if (positionAxe1>700) {
angleServoPan=angleServoPan+1;
constrain(angleServoPan,ANGLE_MIN,ANGLE_MAX);
}
if (positionAxe1<300) {
angleServoPan=angleServoPan-1;
constrain(angleServoPan,ANGLE_MIN,ANGLE_MAX);
}
if (positionAxe2>700) {
angleServoTilt=angleServoTilt+1;
constrain(angleServoTilt,ANGLE_MIN,ANGLE_MAX);
}
if (positionAxe2<300) {
angleServoTilt=angleServoTilt-1;
constrain(angleServoTilt,ANGLE_MIN,ANGLE_MAX);
}
//------------- mise à jour de la position du servomoteur —
if (angleServoPan!=angleServoPan0) {
mon_servoPan.writeMicroseconds(angle(angleServoPan)); // crée impulsion à partir valeur angle - plus précis que write()
angleServoPan0=angleServoPan; // mémorise dernière valeur angle prise en compte
}
if (angleServoTilt!=angleServoTilt0) { // si angleServoTilt a changé
mon_servoTilt.writeMicroseconds(angle(angleServoTilt)); // crée impulsion à partir valeur angle - plus précis que write()
angleServoTilt0=angleServoTilt; // mémorise dernière valeur angle prise en compte
}
delay(6); // fixe la vitesse de mouvement du servo - entre 2 lecture analogique
//while(1); // stop loop
} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
// ********************************************************************************
// ////////////////////////// FONCTIONS DE GESTION DES INTERRUPTIONS ////////////////////
// ////////////////////////// AUTRES FONCTIONS DU PROGRAMME ////////////////////
//------------- fonction calibrage impulsion servomoteur à partir valeur angle en degrés
int angle(int valeur_angle) {
int impuls=0;
impuls=map(valeur_angle,ANGLE_MIN,ANGLE_MAX,POS_MIN, POS_MAX);
return impuls;
} // fin fonction impulsion servomoteur
// ////////////////////////// Fin du programme //////////////////// [/code]