Au secours je bloque

Bonjour,

Je debute sur arduino et je bloque sur un programme que j'ai trouvé sur le net.
j ai réussi a y apporter quelques modifications qui s'adapte a mon projet mais je bloque sur une chose.

le programme sert a faire fonctionner un passage a niveau en modélismes.
il fonctionne avec un bouton qui déclenche un servo moteur pour actionner la barrière a la descente et quand on appui il remonte.
je voudrais mettre deux boutons. 1 pour faire descendre la barrière seulement et l autre la monté uniquement.

Si quelqu'un aurait la gentillesse de m'aider se serait très gentil.

Voici mon programme.
#include <Servo.h>
#include <LightDimmer.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;
int sonnerie = 9;

const int angleMin = 1250;
const int angleMax = 1600;
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 int pinBouton1 = 1;/
le bouton est connecté à la broche A1 */

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

boolean etatBouton = RELACHE;
boolean etatBouton1 = RELACHE;

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

const byte feu1Pin = 10;

/* Deux LightDimmerSoft pour le feu */
LightDimmerSoft clignotantFeu1;

/*

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

    return resultat;
    }

boolean lirePoussoir1()
{
boolean resultat = RELACHE;
if (analogRead(pinBouton1) > 512) {
resultat = PRESSE;
}

return resultat;

}

byte lireEvenement()
{
byte evenement;
boolean nouvelEtat = lirePoussoir();

if (nouvelEtat == etatBouton)
   evenement = AUCUN_EVENEMENT;

   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()
    {
    digitalWrite(sonnerie,LOW);
    monServo.attach(2);
    clignotantFeu1.begin(feu1Pin, HIGH);
    pinMode(sonnerie, OUTPUT);
    }

/*

  • La fonction loop() est exécutée

  • répétitivement
    /
    void loop()
    {
    LightDimmer::update();
    /
    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;
    digitalWrite(sonnerie, HIGH);
    delay(2000);
    digitalWrite(sonnerie,LOW);
    clignotantFeu1.startBlink();

             break;
             
     
            
         case SERVO_A_ANGLE_MAX:
         case SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX:
             vitesse = -1;
             etatServo = SERVO_EN_MOUVEMENT_VERS_ANGLE_MIN;
           clignotantFeu1.off();
             
             break;
             
            
             
     } 
    

    }

    delay(15);
    }

Il est urgent de lire le post épinglé :

Il faut mettre en forme ton code (entre balises code) pour qu'il soit lisible

Bonjour,

Eh bien pour un début il est un peu raté.

De toute évidence ce message ne t'as pas sauté aux yeux ou tu n'as pas jugé utile de le lire parce que c'est difficile de ne pas le voir :

Dommage pour toi car tu y aurais lu que le titre que tu as utilisé à pour particularité de faire fuir les aidants, à une ou deux exceptions prés.
Les titres doivent être explicites car ils servent aux moteur de recherche du forum !

Tu y aurais lu que tel que présenté ton code est illisible et donc personne ne le lira, à une ou deux exceptions près.
Il faut obligatoirement placer le code entre balises code (icône : "</>" ).
Et l'indenter (control T dans l'IDE arduino) avant de le copier.

Tu y aurais lu qu'il faut indiquer clairement son matériel et qu'il faut donner les liens pour que l'on puisse aller chercher plus de documentation sur le matériel ou les programmes.
Il existe une bonne vingtaine de modèles de cartes arduino différents et autant avec Espressif.
Si le forum a pris le soin d'écrire ce message c'est aussi dans l'intérêt des demandeurs.

Il est toujours possible de faire bien.
Inutile de faire un nouveau message tu peux éditer le premier.

Pour éditer il faut cliquer sur l'icône "crayon" en dessous du message.

Si tu le fais je supprime celui pour redonner de la clarté au sujet.

A Bientôt.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.