Voici le programme n'hésitez pas si il y a des améliorations à apporter :
// --- Inclusion des librairies ---
#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=10; // angle position MIN en degrés
const int POS_MIN=600; // largeur impulsion pour position ANGLE_MIN degrés du servomoteur
const int ANGLE_MAX=170; // angle position MAX en degrés
int POS_MAX=2300; // largeur impulsion pour position ANGLE_MAX degrés du servomoteur
// --- Déclaration des constantes des broches E/S numériques ---
const int bpRouge=12; // Constante pour la broche 12
const int bpBleu=9; // Constante pour la broche 9
const int bpJoystick=5; // Constante pour la broche 5
const int broche_servo=6; // Constante pour la broche 6
// --- Déclaration des constantes des broches analogiques ---
const int axe1Joystick=2;
const int axe2Joystick=3;
// --- 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=2; // Variable pour acquisition résultat brut de conversion analogique numérique axe 1 Joystick
int positionAxe2=3; // Variable pour acquisition résultat brut de conversion analogique numérique axe 2 Joystick
int angleServo=180; // variable de position du servo en degrés
// --- Déclaration des objets utiles pour les fonctionnalités utilisées ---
//--- Création objet servomoteur
Servo mon_servo; // crée un objet servo pour contrôler le servomoteur
void setup() { // debut de la fonction setup()
//--- Initialisation Servomoteur
mon_servo.attach(broche_servo); // attache l'objet servo à la broche de commande du servomoteur
//mon_servo.attach(broche_servo, POS_MIN, POS_MAX); // attache l'objet servo à la broche de commande du servomoteur avec calibrage auto
// ------- Broches en sorties numériques -------
pinMode (broche_servo,OUTPUT); // Broche broche_servo configurée en sortie
// ------- Broches en entrées numériques -------
pinMode (bpRouge,INPUT); // Broche bpRouge configurée en entrée
pinMode (bpBleu,INPUT); // Broche bpBleu configurée en entrée
pinMode (bpJoystick,INPUT); // Broche bpJoystick configurée en entrée
// ------- 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
mon_servo.writeMicroseconds(angle(angleServo)); // crée impulsion à partir valeur angle - plus précis que write()
} // fin de la fonction setup()
void loop(){ // debut de la fonction loop()
//mesure_brute= analogRead(broche_analogique) ; // acquisition conversion analogique numérique (100µs env.) sur broche analogique indiquée
// ----------- code type Shield Arduino Joystick + BPx2 ------
//----- 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>1000) {
angleServo=angleServo+1;
}
if (positionAxe1<400) {
angleServo=angleServo-1;
}
//---- lecture état des BP du shield Joystick
if (digitalRead(bpRouge)==APPUI) { // si appui BP rouge
angleServo=90; // positin médiane
}
if (digitalRead(bpBleu)==APPUI) { // si appui BP
}
if (digitalRead(bpJoystick)==APPUI) { // si appui BP joystick
}
//------------- mise à jour de la position du servomoteur ---
constrain(angleServo,0,180);
mon_servo.writeMicroseconds(angle(angleServo)); // crée impulsion à partir valeur angle - plus précis que write()
delay(10);
//while(1); // stop loop
} // fin de la fonction loop()
int angle(int valeur_angle) {
int impuls=0;
impuls=map(valeur_angle,ANGLE_MIN,ANGLE_MAX,POS_MIN, POS_MAX);
return impuls;
}