Partage
  • Partager sur Facebook
  • Partager sur Twitter

ARDUINO, envoyer une info à une led grace au compt

    17 novembre 2017 à 0:15:54

    Bonjour à tous,

    Je suis en train d'effectuer un petit exercice ou je pèche. Je suis en train de vouloir, à l'aide de deux boutons poussoir, faire une sorte de comptage avec l'un des boutons, et exécuter avec le second bouton, une led qui clignotera le nombre de fois que j'ai appuyé sur le premier bouton.
    Exemple : J'appuie 5 fois sur le premier bouton, le moniteur série sera connecter pour me donner cette information. Ensuite j'actionne une fois le second bouton qui fera clignoter ma led 5 fois.

    Pour coder le comptage, je n'ai pas de problème, j'ai tout simplement créé une variable que j'appelle  à +1 quand j'actionne le bouton.

    Mon problème, c'est lorsque j'appuie sur le second. J'ai creusé la chose mais je n'ai aucune idée de savoir comment lui faire comprendre de faire clignoter la led le nombre de fois demandé.

    Je vous remercie d'avance pour votre aide.
    • Partager sur Facebook
    • Partager sur Twitter
      17 novembre 2017 à 8:55:54

      Bonjour,

      Il suffit de faire une boucle for

      • Partager sur Facebook
      • Partager sur Twitter
        17 novembre 2017 à 12:07:24

        Bonjour,

        Je te donne une idée d'algorithme à mettre en place. Tout d'abord tu dis que tu compte le nombre de fois que tu appuies sur le premier bouton. Tout simplement tu stock le nombre de clic dans une variable et ensuite tu détecte l'appuie sur le second bouton.

        Une fois le second bouton appuyé une fois tu enclenche grâce à un boucle for qui sera parcourue le nombre de fois que tu as clic sur ton premier bouton. Pour faire clignoter une LED tu peux utiliser un delay :

        LED on delay LED of delay LED on delay LED off

        Avec cela tu devrais pouvoir t’en sortir. à toi de coder maintenant.

        Henri.

        • Partager sur Facebook
        • Partager sur Twitter
          18 novembre 2017 à 1:46:04

          Voici ce que j'ai fais, depuis que j'ai ajouté le bouton 2, ca ne compte plus et lorsque j'appuie sur mon bouton 2, ma led clignote 2 fois....va savoir pourquoi. Merci de votre aide.

          int bouton1 = 3;
          int bouton2 = 4;
          int LED = 8;
          
          int comptage = 0, ETATBP1, Memoire = LOW;
          int ETATBP2;
          
          
          void setup() {
          
            Serial.begin(9600);
          
            pinMode (bouton1, INPUT_PULLUP);
            pinMode (bouton2, INPUT_PULLUP);
            pinMode (LED, OUTPUT);
          
          }
          
          void loop() {
          
          
          
            ETATBP1 = digitalRead(bouton1);
          
            if ((ETATBP1 != Memoire) && (ETATBP1 = HIGH))
            {
              comptage++; // depuis que j'ai rédigé la fonction boutonled, ca ne compte plus
          
              Serial.println(comptage);
              delay(500);
            }
            Memoire = ETATBP1;
            boutonled();
          }
          
          void boutonled() {
          
            int BP2_ACTIVE = 0;
          
            ETATBP2 = digitalRead(bouton2); // quand j'appuie sur le bouton 2, la led clignote deux fois......pourquoi??
          
          
            /*JE NE COMPRENDS PAS COMMENT APPELER MA VARIABLE AVEC UN FOR*/
          
            for (comptage = 0; comptage <= Memoire; comptage ++) {
              if (ETATBP2 == BP2_ACTIVE) {
          
                /************************************************************/
          
                digitalWrite (LED, HIGH);
                delay(500);
                digitalWrite (LED, LOW);
                delay(500);
              }
            }
          }
          



          • Partager sur Facebook
          • Partager sur Twitter
            18 novembre 2017 à 11:36:16

            Il y a énormément d'erreur dans ta fonction boutonled()

            tu essaye de faire un for quand comptage vaut 0, c'est à dire une fois avant d'appuyer sur le bouton 1

            Il faut que tu commence par revoir l'utilisation de cette boucle en arduino, regarde ici: https://www.arduino.cc/reference/en/language/structure/control-structure/for/

            De plus, tu fait ta boucle tant que comptage <= à Memoire qui vaut LOW, donc 0, à nouveau ca pose problème,

            Tu devrais avoir quelques chose comme:

            for (i= 0; i <= comptage; i++) {
              // Allumer les leds
            }

            Tu as une autre erreur, c'est la détection de la pression du bouton 2, tu l'as mis dans ta boucle for, or il faut d'abord détecter l'appuie et ENSUITE lancer le clignotement des leds

            Donc :

            if (ETATBP2 == BP2_ACTIVE) {
              for(/*a compléter */){
              }
            }


            J'espère que c'est un peu plus claire à présent :)

            • Partager sur Facebook
            • Partager sur Twitter
              18 novembre 2017 à 13:10:46

              ok merci Golden j'ai compris, j'ai inversé le "if" avec le "for". Je réessaye un code en espérant que cela fonctionne et je reviens.

              MAJ :

              Cela fonctionne! Vraiment au top! Merci!

              int bouton1 = 3;
              int bouton2 = 4;
              int LED = 8;
               
              int comptage = 0, ETATBP1, Memoire = LOW;
              int ETATBP2;
               
               
              void setup() {
               
                Serial.begin(9600);
               
                pinMode (bouton1, INPUT_PULLUP);
                pinMode (bouton2, INPUT_PULLUP);
                pinMode (LED, OUTPUT);
               
              }
               
              void loop() {
               
               
               
                ETATBP1 = digitalRead(bouton1);
               
                if ((ETATBP1 != Memoire) && (ETATBP1 = HIGH))
                {
                  comptage++; // depuis que j'ai rédigé la fonction boutonled, ca ne compte plus
               
                  Serial.println(comptage);
                  delay(200);
              
              
                }
                Memoire = ETATBP1;
                      boutonled();
               }
               
              void boutonled() {
               
                int BP2_ACTIVE = 0;
                int i;
               
                ETATBP2 = digitalRead(bouton2); 
               
                
                if (ETATBP2 == BP2_ACTIVE) {
                  
                for (i= 0; i <= comptage; i++) {
                 
                
                    digitalWrite (LED, HIGH);
                    delay(500);
                    digitalWrite (LED, LOW);
                    delay(500);
                  }
                }
              }


              Ensuite je souhaiterais rajouter deux autres boutons : un bouton pour revenir en arriere dans mon comptage, et le second permettrai de remettre le compteur à zéro.

              Je pense que pour le premier je ne vais pas avoir de probléme, il suffira de noter ma variable "comptage" en "--".

              Par contre pour mettre le compteur à zéro.....je vais y réfléchir.

              -
              Edité par gaelapper 18 novembre 2017 à 13:19:07

              • Partager sur Facebook
              • Partager sur Twitter
                18 novembre 2017 à 18:54:06

                Bravo à toi !

                Pour remettre à 0 suffit de faire un comptage = 0;

                • Partager sur Facebook
                • Partager sur Twitter
                  18 novembre 2017 à 20:33:16

                  Merci Golden, dernière petite (ou grosse...) question : je souhaite effectuer le même comptage que mon premier bouton sauf que les chiffres ne corresponderaient pas au nombre de led allumée mais à un temps de clignotement dans une boucle infini.

                  Ce qui veut dire que lorsque que j'appuie sur mon deuxieme bouton, si mon comptage est à 10, alors la led clignotera toutes les 10 secondes. 

                  C'est possible?

                  Il faut pas utiliser millis()?

                  Merci

                  -
                  Edité par gaelapper 18 novembre 2017 à 20:33:44

                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 novembre 2017 à 10:32:15

                    C'est exactement ca, tu utilise millis()

                    Quelque chose comme ceci

                    if ( (ledState==HIGH) && ((millis()-previousTime) > intervale) ){
                      previousTime = millis();
                      ledState = LOW;
                      }
                    
                    if ( (ledState==LOW) && ((previousTime + duree) > millis () ) ){
                      previousTime = millis();
                      ledState = HIGH;
                      }
                    
                    digitalWrite (led, ledState);

                    J'ai pas testé ce code, mais dans la logique ca devrais être ça

                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 novembre 2017 à 12:01:17

                      Bonjour et merci de votre intention,

                      J'ai développé un petit bouton sur android pour remplacé le bouton poussoir par un bouton en bluetooth. Et la ca se gâte notamment sur cette étape : ETATBP1 est une variable lu par la lecture du bouton. 

                      "ETATBP1 = digitalRead(bouton1)

                      if ((ETATBP1 != Memoire) && (ETATBP1 = HIGH))"

                      Voici mon code bluetooth (sans le setup) :

                      int comptage = 0, Memoire = LOW;
                        
                        const char etat = 1;
                        while (HC06.available())
                        {
                          delay(3);
                          char c = HC06.read();
                          messageRecu += c;
                        }
                        if (messageRecu.length() > 0)
                        {
                          if (messageRecu == "COMPTAGE:1"){
                      
                      
                      
                       if ((etat != Memoire) && (etat == HIGH))
                        {
                          comptage++;
                      
                          Serial.println(comptage);
                          delay(200);
                      
                      
                        }
                        Memoire = etat;
                      
                        }}
                            messageRecu = "";
                       
                      }
                      

                      Je recois bien mon message, par contre ca ne compte pas. Dés que j'appuie sur le bouton cela m'inscris 0. Je sais qu'il faudrait que je créé une variable autre que "const char" etat = 1. Mais je ne sais pas comment.

                      Avez vous une idée? 

                      En vous remerciant d'avance.

                      -
                      Edité par gaelapper 19 novembre 2017 à 12:02:25

                      • Partager sur Facebook
                      • Partager sur Twitter
                        19 novembre 2017 à 13:26:11

                        Si tu arrive à lire le message, il te suffit de faire une comparaison avec un if, si le if est vrai tu incrémente ta variable

                        Mais je pense que tu devrais reprendre les bases de la programmation car tu as pas mal de lacune sur les notions essentiels

                        • Partager sur Facebook
                        • Partager sur Twitter
                          19 novembre 2017 à 13:49:22

                          Ok merci a toi golden, j'apprends au fur et à mesure.
                          • Partager sur Facebook
                          • Partager sur Twitter

                          ARDUINO, envoyer une info à une led grace au compt

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown