Partage
  • Partager sur Facebook
  • Partager sur Twitter

panne ? erreur de programmation ?

reaction incomprehensible avec plusieurs boutons poussoir ?

    11 mai 2020 à 16:31:12

    bonjour,

    j'ai réaliser un montage simple qui consiste a avoir 4 bouton poussoir sur une carte arduino et 4 led . chaque led s'allume ou s’éteint en fonction du bouton qui lui est associés .

    problème.. tous fonctionne bien mais par moment  j'ai une inversion des leds en pressant le bouton 3 uniquement il allume la led4 ..

    si quelqu'un a une idée ( deja chager le N°des pin rien et les bouton on des condo anti rebond )

    const int buttonPin1  = 2;
    const int buttonPin2  = 3;
    const int buttonPin3  = 4;
    const int buttonPin4  = 5;
        
    const int ledPin1     = 6;  
    const int ledPin2     = 7;
    const int ledPin3     = 8;
    const int ledPin4     = 9;
    
    int buttonState1      = 0;    
    int lastButtonState1  = 0;    
    int ledState1         = 0;  
    
    int buttonState2      = 0;    
    int lastButtonState2  = 0;    
    int ledState2         = 0; 
    
    int buttonState3      = 0;    
    int lastButtonState3  = 0;    
    int ledState3         = 0; 
    
    int buttonState4      = 0;    
    int lastButtonState4  = 0;    
    int ledState4         = 0; 
     
    void setup() {
      Serial.begin(9600); //Initialisation de la communication avec le moniteur série
      
      pinMode(buttonPin1, INPUT);
      pinMode(buttonPin2, INPUT);
      pinMode(buttonPin3, INPUT);
      pinMode(buttonPin4, INPUT);
      
      pinMode(ledPin1, OUTPUT);  
      pinMode(ledPin2, OUTPUT);
      pinMode(ledPin3, OUTPUT);
      pinMode(ledPin4, OUTPUT);
    
    }
     
    void loop() {
    
      buttonState1 = digitalRead(buttonPin1);
      if (buttonState1 != lastButtonState1) {
     
        if (buttonState1 == 1) {
          if(ledState1==1) {  
             ledState1=0;
             Serial.print("led1=>");
             Serial.println(ledState1); // on l'affiche sur le moniteur 
            
          }
          else { 
            ledState1=1;
            Serial.print("led1=>"); 
            Serial.println(ledState1); // on l'affiche sur le moniteur  
          }
        }
     
        lastButtonState1 = buttonState1;
      }
    ///////
      buttonState2 = digitalRead(buttonPin2);
      if (buttonState2 != lastButtonState2) {
     
        if (buttonState2 == 1) {
          if(ledState2==1) {
             ledState2=0;
             Serial.print("led2=>");
             Serial.println(ledState2); // on l'affiche sur le moniteur 
          }
          else {
            ledState2=1;
            Serial.print("led2=>");
            Serial.println(ledState2); // on l'affiche sur le moniteur         
          }
        }
     
        lastButtonState2 = buttonState2;
      }
    ///////
      buttonState3 = digitalRead(buttonPin3);
      if (buttonState3 != lastButtonState3) {
     
        if (buttonState3 == 1) {
          if(ledState3==1) { 
            ledState3=0;
            Serial.print("led3=>");
            Serial.println(ledState3); // on l'affiche sur le moniteur 
          }
          else {
            ledState3=1;
            Serial.print("led3=>");
            Serial.println(ledState3); // on l'affiche sur le moniteur         
          }
        }
     
        lastButtonState3 = buttonState3;
      }
    ///////
      buttonState4 = digitalRead(buttonPin4);
      if (buttonState4 != lastButtonState4) {
     
        if (buttonState4 == 1) {
          if(ledState4==1) {
            ledState4=0;
            Serial.print("led4=>");
            Serial.println(ledState4); // on l'affiche sur le moniteur 
          }
          else {
            ledState4=1;
            Serial.print("led4=>");
            Serial.println(ledState4); // on l'affiche sur le moniteur         
          }
        }
     
        lastButtonState4 = buttonState4;
      }
      
      digitalWrite(ledPin1, ledState1);
      digitalWrite(ledPin2, ledState2);
      digitalWrite(ledPin3, ledState3);
      digitalWrite(ledPin4, ledState4);
      delay(20);
    }
    
    
    



    • Partager sur Facebook
    • Partager sur Twitter
      11 mai 2020 à 17:52:57

      Bonjour,

      Tu n'as pas précisé si tu as mis ou non des résistances de pullup/pulldown sur les boutons et d'après ton code tu n'as pas non plus activé les pull-ups internes de l'arduino (avec INPUT_PULLUP à la place de INPUT dans les appels à pinMode), donc il est fort possible que tes broches soit flottantes en dehors de tout appui sur les boutons et puissent s'activer/se désactiver toutes seules en fonction du bruit électrique ambiant (comme l'appui sur un bouton adjacent).

      PS: Pour le code, utilise plutôt des tableaux et des boucles que des variables numérotées avec des répétitions manuelles de code. 

      • Partager sur Facebook
      • Partager sur Twitter
        12 mai 2020 à 14:54:11

        ok merci je vais essayer le input_pullup ( les résistances de pullup/pulldown sont bien la ) pour le code il est temporaire c'est coder pour simplifier la tache à mon fils de 8 an qui découvre la programmation ( plus tard on passera au tableau pour lui donner de bonne habitude )..

        merci bcp

        • Partager sur Facebook
        • Partager sur Twitter
          12 mai 2020 à 15:19:20

          Si les résistances sont déjà présentes, ça ne devrait rien changer. Dans le cas contraire, ça indiquerait des faux contacts au niveau des résistances.
          • Partager sur Facebook
          • Partager sur Twitter

          panne ? erreur de programmation ?

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