Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Arduino] Incrémenter une valeur lors d'un flanc descendant

    10 mai 2012 à 14:57:24

    Bonjour à tous !

    Ben voila tout est dans le titre. En gros j'ai un switch qui est relié à la pin3 de mon arduino.

    Il est à la base à 0 ensuite on le passe à 1 il ne se passe rien et c'est seulement lorsqu'on le repasse à 0 qu'il se passe quelque chose.

    J'aimerais que ce "quelque chose" soit d'incrémenter une valeur et d'afficher cette valeur sur un écran LCD.

    Voici mon programme qui malheureusement ne fonctionne pas.

    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>

    int pin = 3;
    volatile int NbreOsc = 0; // déclartion d'une variable volatile
    LiquidCrystal_I2C lcd(0x27,16,2);
    void setup()
    {
    pinMode(pin, OUTPUT);
    attachInterrupt(0, blink, FALLING); // attache l'interruption externe n°0 à la fonction blink
    lcd.init ();
    lcd.backlight();
    lcd.print("Nombres =");
    }

    void loop()
    {
    digitalWrite(pin, NbreOsc); // la LED reflète l'état de la variable
    }

    void blink() // la fonction appelée par l'interruption externe n°0
    {
    NbreOsc++;
    lcd.setCursor (0, 1);
    lcd.print (NbreOsc);
    }

    Si quelqu'un serait m’aider ce serait chouette!

    Bien à vous,

    Alexis
    • Partager sur Facebook
    • Partager sur Twitter
      10 mai 2012 à 15:14:12

      (Met ton code en balise code merci :) )

      Je ne sais pas comment marche ta librairie mais si elle utilise des fonctions genre "delay" c'est normal que ca ne marche pas puisque une interruption (tel que ton "blink") désactive les delays.

      Dans un premier temps tu peux essayer de mettre une LED en sortie et de lui faire changer d'état à chaque fois que tu appuies sur le bouton :
      void blink() // la fonction appelée par l'interruption externe n°0
      {
         static int etat = HIGH; //déclare la variable et la garde en mémoire
         digitalWrite(maSortie, etat);
         etat = !etat;
      }
      


      Et normalement ca doit clignoter.
      • Partager sur Facebook
      • Partager sur Twitter

      Retrouvez moi sur mon blog et ma chaine Youtube !

      Anonyme
        10 mai 2012 à 17:21:46

        C'est assez simple à faire en fait, il suffit de mettre dans un booléen l'état du bouton. Ensuite, tu compares l'état actuel de ton bouton par rapport à ce que t'as enregistré dans le booléen
        • Partager sur Facebook
        • Partager sur Twitter
          10 mai 2012 à 17:23:20

          Citation : alex1712

          j'ai un switch qui est relié à la pin3 de mon arduino.
          [...]
          int pin = 3;
          [...]
          pinMode(pin, OUTPUT);
          attachInterrupt(0, blink, FALLING); // attache l'interruption externe n°0 à la fonction blink



          Je ne sais pas si attachInterrupt(0, blink, FALLING) va attacher l'ISR blink à l'interruption externe émise par le pin 3 sur front descendant, néanmoins, mettre la pin 3 en sortie et la brancher sur un interrupteur me semble étrange.
          • Partager sur Facebook
          • Partager sur Twitter
          64kB de mémoire, c'est tout ce dont j'ai besoin
            10 mai 2012 à 18:46:14

            Sauf erreur de ma part, l'interruption 0 correspond à la broche 2 (et non pas 3)...
            @olyte : Ce que tu proposes est une vérification de temps en temps de l'état du bouton. Ca ne marchera que si le programme n'est pas trop long. Dans l'exemple ca devrait effectivement être OK, mais si le programme était trèèèès long, il y aurait un effet de "lag" sur le bouton.
            Après il n'y a pas de solution universelle, tout dépend de l'utilisation et du comportement recherché...

            @alex : Ce que tu peux faire c'est déjà t'assurer que le bouton est branché sur la bonne broche, mettre cette dernière en entrée puis ensuite déclarer l'interruption et faire clignoter une LED avec cette dernière. Ensuite essaie de rajouter ta transmission avec l'écran.
            • Partager sur Facebook
            • Partager sur Twitter

            Retrouvez moi sur mon blog et ma chaine Youtube !

            [Arduino] Incrémenter une valeur lors d'un flanc descendant

            × 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