controle servo par bouton poussoir

Bonjour,

Petite question concernant l’utilisation d’un servo via l’arduino:
Est-il possible d’affecter plusieurs positions pour un servo avec un seul bouton poussoir.
Actuellement je possede un programme qui fonctionne parfaitement mais je n’ais que deux positions. Je n’arrive pas a en rajouter d’autre.
mon programme:

#include <Servo.h>

const byte SERVO_A_ANGLE_MIN = 0;
const byte SERVO_A_ANGLE_MAX = 1;
const byte SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX = 2;
const byte SERVO_EN_MOUVEMENT_VERS_ANGLE_MIN = 3;

const int angleMin = 1250;
const int angleMax = 1750;

Servo monServo;
int vitesse = 0;
int angle = angleMin;
byte etatServo = SERVO_A_ANGLE_MIN;

const int pinBouton = 0; /* le bouton est connecté à la broche A0 */

const boolean PRESSE = true;
const boolean RELACHE = false;

boolean etatBouton = RELACHE;

const byte AUCUN_EVENEMENT = 0;
const byte EVENEMENT_PRESSE = 1;
const byte EVENEMENT_RELACHE = 2;

/*

  • fonctions de gestion du poussoir
    */
    boolean lirePoussoir()
    {
    boolean resultat = RELACHE;
    if (analogRead(pinBouton) > 512) {
    resultat = PRESSE;
    }
    return resultat;
    }

byte lireEvenement()
{
byte evenement;
boolean nouvelEtat = lirePoussoir();
if (nouvelEtat == etatBouton)
evenement = AUCUN_EVENEMENT;
if (nouvelEtat == PRESSE && etatBouton == RELACHE)
evenement = EVENEMENT_PRESSE;
if (nouvelEtat == RELACHE && etatBouton == PRESSE)
evenement = EVENEMENT_RELACHE;
etatBouton = nouvelEtat;
return evenement;
}

/*

  • La fonction setup() est exécutée 1 fois
  • au démarrage du programme
    */
    void setup()
    {
    monServo.attach(2);
    }

/*

  • La fonction loop() est exécutée
  • répétitivement
    /
    void loop()
    {
    /
    actualisation de l’angle du servo */
    monServo.writeMicroseconds(angle);

angle = angle + vitesse;

if (angle > angleMax) {
angle = angleMax;
vitesse = 0;
etatServo = SERVO_A_ANGLE_MAX;
}
else if (angle < angleMin) {
angle = angleMin;
vitesse = 0;
etatServo = SERVO_A_ANGLE_MIN;
}

/* lecture de la commande de l’utilisateur */
byte evenement = lireEvenement();

if (evenement == EVENEMENT_PRESSE) {
switch (etatServo) {
case SERVO_A_ANGLE_MIN:
case SERVO_EN_MOUVEMENT_VERS_ANGLE_MIN:
vitesse = 1;
etatServo = SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX;
break;
case SERVO_A_ANGLE_MAX:
case SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX:
vitesse = -1;
etatServo = SERVO_EN_MOUVEMENT_VERS_ANGLE_MIN;
break;
}
}

delay(3);
}

Merci.

A chaque appui sur ton poussoir, tu peux incrémenter une variable . Et pour chacune des valeurs de cette variable , tu définies une position de ton servo.

Je fais comme ça pour faire du menu défilant sur un LCD, c'est le même principe !

Merci pour ta réponse.
Ce programme a été glané sur le web. Je n’ais donc rien inventé car j’en suis bien incapable.
J’ai tenté d’ajouter des " const byte" et des const int" pour avoir des positions supplementaires:
const byte SERVO_A_ANGLE_MAX = 1;
const byte SERVO_A_ANGLE_MIN = 2;
const byte SERVO_A_ANGLE_MOY = 3;
const byte SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX = 4;
const byte SERVO_EN_MOUVEMENT_VERS_ANGLE_MIN = 5;
const byte SERVO_EN_MOUVEMENT_VERS_ANGLE_MOY = 6;
const int angleMin = 900;
const int angleMax = 2000;
const int angleMOY = 1500;

Ensuite, ça se complique a ce niveau :

lecture de la commande de l’utilisateur */
byte evenement = lireEvenement();

if (evenement == EVENEMENT_PRESSE) {
switch (etatServo) {
case SERVO_A_ANGLE_MIN:
case SERVO_EN_MOUVEMENT_VERS_ANGLE_MIN:
vitesse = 1;
etatServo = SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX;
break;
case SERVO_A_ANGLE_MAX:
case SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX:

vitesse = -1;
etatServo = SERVO_EN_MOUVEMENT_VERS_ANGLE_MIN;
break;

J’avoue etre paumé malgres quelques heures de recherche a essayer de comprendre.