Partage
  • Partager sur Facebook
  • Partager sur Twitter

Faille programme

    27 décembre 2018 à 18:07:27

    Bonjour, je débute avec Arduino et je sèche sur un petit programme.

    L'objectif est de faire clignoter trois leds l'une après l'autre en appuyant sur un bouton et de pouvoir arrêter la séquence en appuyant sur un autre bouton. Le probléme c'est que j'arrive bien a lancer le clignotement des trois leds, mais la boucle ne fonctionne pas (ça s'arrête tout seule)

    Mon câblage est fonctionnel, j'ai vérifié et je n'ai pas d'erreur de compilation.

    Merci de m'aiguiller dans la bonne direction, j'ai surement fait un mauvais choix de fonction.

    // Chenillar  : fait clignoter trois leds une après l'autre
    
    // Définir les sorties
    #define RED 7 
    #define GREEN 6
    #define WHITE 5
    int BM = 9; // Bouton Marche
    int BA = 8;// Bouton arrêt
    
    
    void setup() { // iniatilisation programme
      pinMode(RED, OUTPUT);
      pinMode(GREEN, OUTPUT);
      pinMode(WHITE, OUTPUT);
      pinMode(BM, INPUT_PULLUP);
      pinMode(BA, INPUT_PULLUP);
    }
    
    
    void chenillard() {// fonction chenillard
      digitalWrite(RED, HIGH);   // Allume la led rouge
      delay(1000);                       // Attend une seconde
      digitalWrite(RED, LOW);    // Eteins la led rouge
      digitalWrite(GREEN, HIGH); // Allume la led verte
      delay(1000);                      // Attend une seconde
      digitalWrite(GREEN, LOW);  // Eteins la led verte
      digitalWrite(WHITE, HIGH); // Allume la led blanche
      delay(1000);                      // Attend une seconde
      digitalWrite(WHITE, LOW);  // Eteins la led blanche 
    
      }
    
    void extinction () { // Extincsion chenillard
      digitalWrite(RED, LOW); // Eteins led rouge
      digitalWrite(GREEN, LOW); // Eteins led verte
      digitalWrite(WHITE, LOW); // Eteins led blanche
    }
    
    void loop() {
      if (digitalRead(BM) == LOW){ // Lance chenillard avec Bouton A
        chenillard();
      }
      if (digitalRead(BA) == LOW){ // Arrête chenillard avec Bouton B
        extinction();
      }
      }
      

    Merci de vos conseils

    • Partager sur Facebook
    • Partager sur Twitter
      27 décembre 2018 à 21:30:40

      Bonsoir,

      en ligne 40, le programme demande à ce que le bouton BM soit maintenu appuyé sinon le chenillard n'est pas relancé

      • Partager sur Facebook
      • Partager sur Twitter
        27 décembre 2018 à 22:20:56

        Merci, il faut donc que je trouve comment lancer la boucle avec une impulsion....
        • Partager sur Facebook
        • Partager sur Twitter
          27 décembre 2018 à 22:52:07

          Quand le BP est appuyé, tu places un bit à 1. Dans la boucle principale, tu testes le bit, si = 1, alors clignotement. Dans cette même boucle tu testes le BP2 qui mettra le bit à 0.

          Je ne sais pas si j'ai été clair.

          • Partager sur Facebook
          • Partager sur Twitter
          Le 25 juillet 2016, j'ai essayé une Ford Mustang.
            28 décembre 2018 à 16:48:01

            Oui et non, je vais creuser un peu
            • Partager sur Facebook
            • Partager sur Twitter
              28 décembre 2018 à 18:23:51

              totche a écrit:

              Oui et non, je vais creuser un peu


              Tu ne comprends pas quoi?
              • Partager sur Facebook
              • Partager sur Twitter
              Le 25 juillet 2016, j'ai essayé une Ford Mustang.
                28 décembre 2018 à 18:25:46

                Comme le disait Gérard68, il faut ajouter une nouvelle variable par exemple marcheChenillard

                Dans la boucle on pourrait mettre

                en ligne 41  : marcheChenillard = TRUE
                en ligne 44 :  marcheChenillard = FALSE

                ensuite on ajoutera un test sur l'état de marcheChenillard pour lancer chenillard() ou extinction()

                • Partager sur Facebook
                • Partager sur Twitter
                  28 décembre 2018 à 18:52:32

                  Ok,

                  clgbzh a écrit:

                  Comme le disait Gérard68, il faut ajouter une nouvelle variable par exemple marcheChenillard

                  Dans la boucle on pourrait mettre

                  en ligne 41  : marcheChenillard = TRUE
                  en ligne 44 :  marcheChenillard = FALSE

                  ensuite on ajoutera un test sur l'état de marcheChenillard pour lancer chenillard() ou extinction()

                  Ok, je comprends le principe, mais avec deux boutons, il faut donc deux variables, n'est-ce pas ?



                  • Partager sur Facebook
                  • Partager sur Twitter
                    29 décembre 2018 à 12:58:11

                    Non surtout pas, il faut une seule et unique variable d'état qui est dépendante de l'appui des 2 boutons.

                    Par ailleurs, il faut remarquer que loop() est suspendue pendant l'exécution du chenillard (ici 3s), autrement dit il faut appuyer sur le bouton BA pendant au moins 3s pour pouvoir être lu par le programme et donc déclencher l'arrêt.

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Faille programme

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    • Editeur
                    • Markdown