Partage
  • Partager sur Facebook
  • Partager sur Twitter

Aide Arduino - Télérupteur

    12 décembre 2013 à 12:05:44

    Je me présente, je m'appelle Kévin et je suis en 1ère technologique. Je fais un bac STI2D option SIN. J'effectue depuis plusieurs semaines un projet avec la carte Arduino Uno. Je suis censé faire le montage d'un télérupteur à deux boutons poussoirs avec le code Arduino qui va avec. Mais manque de compétence ou de connaissances, je n'arrive pas à mes fins. J'ai suivi le tutoriel d'Eskimon pour mieux comprendre le langage Arduino et il m'a été utile pour d'autre projet mais je n'ai pas trouver réponse pour le télérupteur. Je devais rendre ce matin mon projet mais j'ai négocié une semaine de plus. Du coup, faute de temps, je fais appel à vos connaissances pour m'aider :)

    L'école ne m'a fourni en début d'année 3 LED, un bouton poussoir (+ un autre intégré sur le protoshield), 2 résistances ( 10.2 Ohm), une plaque d'essai 170 points et 9 jumper câbles. 

    J'ai essayé plusieurs codes différents, sans réussite, mais voici celui qui se rapproche le plus de ce que j'éspère.


    const int buttonPin = 2; // broche 2 égale bouton
    
    const int ledPin = 13; // broche 13 égale led
    
    int etatDeLaLed = LOW;
    
    
    
    void setup()
    
    {
    
      Serial.begin(9600);
    
      pinMode(ledPin, OUTPUT);
    
      pinMode(buttonPin, INPUT);
    
    
    
    }
    
    
    
    void loop()
    
    {
    
      int etatDeBouton =digitalRead(buttonPin);
    
      delay(500);
    
      Serial.println(etatDeBouton);
    
    
    
      if (etatDeBouton == LOW)
    
      { 
    
        if (etatDeLaLed == LOW)
    
        {
    
          digitalWrite(ledPin, HIGH);
    
          etatDeLaLed = HIGH;
    
        }
    
        else
    
        {
    
          digitalWrite(ledPin, LOW);
    
          etatDeLaLed = LOW;
    
        }
    
      }
    
    }



    • Partager sur Facebook
    • Partager sur Twitter
      12 décembre 2013 à 14:14:47

      Ton code a l'air plutôt correct ! Tu as vérifié tes branchements, notamment ceux du bouton ?

      Sinon, une petite suggestion pour un code plus simple :

      const int buttonPin = 2; // broche 2 égale bouton
      const int ledPin = 13; // broche 13 égale led
      boolean etatDeLaLed = false ;
      
      
      
      void setup(){
        Serial.begin(9600);
        pinMode(ledPin, OUTPUT);
        pinMode(buttonPin, INPUT);
      }
      
      void loop(){
        int etatDeBouton =digitalRead(buttonPin);
        Serial.println(etatDeBouton);
        if (etatDeBouton == LOW){
          etatDeLaLed = !etatDeLaLed;
          digitalWrite(ledPin, etatDeLaLed);
        }
        delay(500);
      }
      



      • Partager sur Facebook
      • Partager sur Twitter
      Faites un tour sur www.nawrasg.fr :)
        12 décembre 2013 à 16:01:04

        Merci de ton aide nawrasg, mais ce que je recherche c'est le même code mais avec 2 boutons poussoirs, dont un sur la plaque d'essai et un sur le protoshield :)
        • Partager sur Facebook
        • Partager sur Twitter
          12 décembre 2013 à 20:53:50

          Pour contrôler la même LED ou 2 LEDs différentes ?
          • Partager sur Facebook
          • Partager sur Twitter
          Faites un tour sur www.nawrasg.fr :)
            15 décembre 2013 à 17:07:38

            Pour contrôler une même LED avec deux boutons poussoirs différents dont un sur le protoshield
            • Partager sur Facebook
            • Partager sur Twitter
              15 décembre 2013 à 20:59:03

              Si tu ne comprends pas une partie du code, n'hésite pas :)

              const int buttonPin = 2; // broche 2 égale bouton
              const int buttonPin2 = 3; //broche 3 égale bouton
              const int ledPin = 13; // broche 13 égale led
               
              int etatDeLaLed = LOW;
               
               
               
              void setup(){
                Serial.begin(9600);
                pinMode(ledPin, OUTPUT); 
                pinMode(buttonPin, INPUT);
                pinMode(buttonPin2, INPUT); 
              }
               
              void loop(){
                int etatDeBouton = digitalRead(buttonPin);
                int etatDeBouton2 = digitalRead(buttonPin2); 
                delay(500); //perso, je préfère mettre les delay à la fin
                Serial.println(etatDeBouton);
                Serial.println(etatDeBouton2);
                
                if ((etatDeBouton == LOW) || (etatDeBouton2 == LOW)){ //l'un ou l'autre
                   if (etatDeLaLed == LOW){
                     digitalWrite(ledPin, HIGH);
                     etatDeLaLed = HIGH;
                   }else{
                    digitalWrite(ledPin, LOW);
                    etatDeLaLed = LOW;
                  }
                }
              }



              • Partager sur Facebook
              • Partager sur Twitter
              Faites un tour sur www.nawrasg.fr :)
                16 décembre 2013 à 18:39:44

                Je comprend ton code c'est bon :)

                Mais j'ai du mal avec le montage, je n'y arrive qu'a utiliser qu'un seul bouton :/

                • Partager sur Facebook
                • Partager sur Twitter
                  16 décembre 2013 à 19:23:39

                  bonjour,
                  tu voudrais pas qu'on te fasse tes devoirs, non plus?
                  ton probleme est simple, et franchement, si tu réussis pas à le faire tout seul, tu risque de pas mal galérer. si tu as compris le programme, pourquoi n'arrives-tu pas à faire le montage qui y correspond? (soit dit en passant, c'est hyper simple, y'a même les noms en haut qui correspondent aux broches arduino et tout...) quel bouton fonctionne, et sous quelles conditions? (essaye d'enlever la fonction delay et les deux fonctions d'affichage, tu verras que ça marchera peut-être mieux.)
                  nawrasg: le delay me défrise, il sert à quoi au juste si ce n'est bloquer pour 90% du temps un programme qui se voudrait évenementiel ?

                  -
                  Edité par remace 16 décembre 2013 à 20:06:10

                  • Partager sur Facebook
                  • Partager sur Twitter

                  oui. non. enfin je regarde et je te dis.

                    16 décembre 2013 à 22:23:01

                    remace a écrit:

                    nawrasg: le delay me défrise, il sert à quoi au juste si ce n'est bloquer pour 90% du temps un programme qui se voudrait évenementiel ?

                    Je parie que la réponse est : Pour pas saturer la voie série !

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Retrouvez moi sur mon blog et ma chaine Youtube !

                      16 décembre 2013 à 22:33:24

                      quel intérêt d'envoyer une valeur de led et deux valeurs de boutons au travers de la voie série toutes les 500ms? enfin j'veux dire... pourquoi ne pas afficher uniquement lorsqu'il y a un changement?

                      • Partager sur Facebook
                      • Partager sur Twitter

                      oui. non. enfin je regarde et je te dis.

                        16 décembre 2013 à 22:36:45

                        Chai pas... Mais en tout cas 500ms c'est nickel pour foutre en l'air les tests :D (parce que perso quand j'appuie sur un bouton c'est de l'ordre de l'impulsion)... Après hypothèse 2 : 500ms ca fait aussi un (gros) filtre anti-rebond logiciel...

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Retrouvez moi sur mon blog et ma chaine Youtube !

                          16 décembre 2013 à 22:48:58

                          ha ouais, 500ms c'est déjà un interrupteur bien moche. comme on parle d'un télérupteur, on pourrait peut-être tenter de baisser cette valeur (genre la diviser par 10) et virer les serial.println (ou les mettre à un endroit plus intelligent), ce qui amènerait déjà une situation plus proche de la réalité.
                          (je hais la scrutation pour faire de l'évènementiel, comme ça, je trouve ça d'un moche... 'fin j'sais pas ça sert a rien d'avoir un microcontroleur pour s'en servir comme si c'était un i7-4770K, et dire "on s'en balance de la latence hasardeuse dûe à la longueur, et aux instructions branch contenues dans la boucle")

                          • Partager sur Facebook
                          • Partager sur Twitter

                          oui. non. enfin je regarde et je te dis.

                            17 décembre 2013 à 9:42:47

                            En effet Eskimon, comme je ne sais pas si un condensateur se trouve dans le montage, j'ai préféré laisser le delay comme filtre antirebond :)

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Faites un tour sur www.nawrasg.fr :)
                              17 décembre 2013 à 17:23:54

                              bah dans tous les cas, ce delay pose probleme: mettons que la lecture d'un bouton dure 5µs, bah chaque entrée est scrutée 5µs toutes les 500ms. autrement dit en francais, l'état des interrupteurs est scruté quelque chose comme 0.0001% du temps.(pardonne-moi les erreurs de virgules) c'est pas ce qu'on pourrait appeler une scrutation très efficace.
                              premiere solution efficace: éventuellement glisser le delay "au début du gros if", là où il est utile, déjà on perd le défaut de temps de scrutation.
                              2e solution, ne pas mettre d'anti-rebond du tout: l'OP est en premiere, et il n'en a peut-être jamais entendu parler, son application n'est pas "dans un domaine professionnel" (donc pas besoin de résultat failsafe et BadassUserProof).

                              • Partager sur Facebook
                              • Partager sur Twitter

                              oui. non. enfin je regarde et je te dis.

                                18 décembre 2013 à 18:38:20

                                Je ne comprend pas, je fait le même montage que pour un bouton en rajoutant  un bouton sur la plaque d’essai avec une entrée broche 3 et une sortie GND et sa ne marche pas...

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  18 décembre 2013 à 18:44:26

                                  essaie en appuyant plus d'une demi seconde à chaque fois.

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  oui. non. enfin je regarde et je te dis.

                                    18 décembre 2013 à 19:11:01

                                    sa ne marche toujours pas.

                                    je pense que cela vient de mon montage

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      18 décembre 2013 à 19:24:11

                                      Publie une photo de ton montage
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Faites un tour sur www.nawrasg.fr :)
                                        19 décembre 2013 à 11:41:55

                                        Je suis un peu dubitatif sur la manière dont le premier bouton est connecté ! (Regarde le cours d'Eskimon)

                                        C'est normal que ton deuxième bouton ne fonctionne pas puisqu'il n'est pas connecté à ton alimentation !

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Faites un tour sur www.nawrasg.fr :)

                                        Aide Arduino - Télérupteur

                                        × 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