[Programmation] ARDUINO Exercice comptage et LED
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 35

ARDUINO Exercice comptage et LED



  1. #1
    Enora44

    ARDUINO Exercice comptage et LED


    ------

    Bonjour à tous,

    Je suis nouvelle sur le forum, j'espère que je poste dans la bonne rubrique. Sinon, je vous prie, s'il vous plaît de m'en faire part. je rappelle que mon niveau en programmation "C ARDUINO" est débutante confirmée. Voilà je suis en train d'effectuer un petit exercice qui me servira un peu plus tard dans un projet.

    Le but : à partir de 2 boutons, effectuer un comptage, dés que j'appuie sur l'un des boutons, un chiffre s'incrémente (1.2.3.4.5...)et il est bien entendu qu'il sera indiqué sur le moniteur série. Un bouton UP et un bouton DOWN. J'ajoute à ça un troisième bouton qui me permet d'activer une LED qui clignotera le nombre de fois que j'ai cliqué sur les premiers boutons.
    Exemple : j'appuie 5 fois sur le premier bouton, ensuite j'appuie sur le bouton de la led, elle clignotera donc 5 fois.

    J'ai voulu aller plus loin en voulant contrôler le temps : Au lieu que l'incrémentation des deux premiers boutons incrémentent le nombre de clignotement, ils incrémenteront le temps.
    Exemple : J'appuie 5 fois sur le premier bouton, ensuite j'appuie sur le bouton de la led, elle s'allumera 5 secondes pendant 1 seconde.
    Je sais que je dois utiliser la fonction millis() mais après plusieurs tentatives d'expériences, je suis dans l'impasse.

    Je vous présente le premier code qui permet de faire clignoter la led le nombre de fois souhaité :

    Code:
    int bouton1 = 3;
    int bouton2 = 4;
    
    int boutondown = 5;
    int LED = 8;
    
    int comptage = 0, ETATBP1, Memoire = LOW;
    int ETATBP2;
    int ETATBP3;
    
    void setup() {
    
      Serial.begin(9600);
    
      pinMode (bouton1, INPUT_PULLUP);
      pinMode (bouton2, INPUT_PULLUP);
      pinMode (boutondown, INPUT_PULLUP);
    
    
      pinMode (LED, OUTPUT);
    
    }
    
    void loop() {
    
      ETATBP1 = digitalRead(bouton1);
    
      if ((ETATBP1 != Memoire) && (ETATBP1 == HIGH))
      {
        comptage++;
    
        Serial.println(comptage);
        delay(200);
    
    
      }
      Memoire = ETATBP1;
      boutonled();
      boutondown01();
    }
    
    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);
        }
      }
    }
    
    void boutondown01() {
    
      ETATBP3 = digitalRead(boutondown);
    
      if ((ETATBP3 != Memoire) && (ETATBP3 == HIGH))
      {
        comptage--;
    
        Serial.println(comptage);
        delay(200);
      }
      Memoire = ETATBP3;
    }

    Voici ensuite le second code (très ressemblant du premier), qui intégre le temps (en faite il y a une partie blanche par rapport au bouton led, et la clé de tout est ici )

    Code:
    int bouton1 = 3;
    int bouton2 = 4;
    
    int boutondown = 5;
    const int LED = 8;
    
    int comptage = 0, ETATBP1, Memoire = LOW;
    int ETATBP2;
    int ETATBP3;
    
    
    
    void setup() {
    
      Serial.begin(9600);
    
      pinMode (bouton1, INPUT_PULLUP);
      pinMode (bouton2, INPUT_PULLUP);
      pinMode (boutondown, INPUT_PULLUP);
    
    
      pinMode (LED, OUTPUT);
    
    }
    
    void loop() {
    
      ETATBP1 = digitalRead(bouton1);
    
      if ((ETATBP1 != Memoire) && (ETATBP1 == HIGH))
      {
        comptage++;
    
        Serial.println(comptage);
        delay(200);
    
    
      }
      Memoire = ETATBP1;
      boutonled();
    
    }
    
    void boutonled() {
    
      int BP2_ACTIVE = LOW;
      int i;
    
      ETATBP2 = digitalRead(bouton2);
    
    
      if (ETATBP2 == BP2_ACTIVE) {
    
        for (i = 0; i <= comptage; i++) {
    
    
    
    //C'EST ICI QUE JE BLOQUE!!!!!!
    
    
    
    digitalWrite (LED,HIGH);
    
    
        }}}
    Je vous remercie d'avoir prêté attention à ma problématique. J'exposerai un autre petit soucis par la suite, toujours concernant ce code.

    En vous remerciant d'avance.

    -----

  2. #2
    Chtulhu

    Re : ARDUINO Exercice comptage et LED

    Bonjour Enora44,

    en aparté, n'existe-t-il pas autre chose comme variable que le int sous arduino?
    Par exemple un char est suffisant de 0 à 255.
    Il faut aussi apprendre à commenter vos codes, c'est une bonne habitude à prendre
    Si vous pouviez décrire ce qui ne fonctionne pas, j'avoue ne pas avoir compris là où vous butez...
    Le premier code fonctionne ou pas?

  3. #3
    Enora44

    Re : ARDUINO Exercice comptage et LED

    Bonsoir, tout d'abord merci pour la réponse et les conseils. C'est vrai que je n'ai pas commenté et désolé pour la présentation un peu succincte du programme. Le premier code fonctionne : Dans la fonction "boutonled()" je lis l'état de mon second bouton qui, une fois activé appelle la variable "comptage" et me permet d'allumer la led le nombre de fois souhaité. Nonobstant, mon second code ne fonctionne pas car après plusieurs essais, je bloque. Je m'explique avec en exemple de ce que je souhaite faire exactement : J'appuie 7 fois (cela aurait pu être 10, 23, 45...c'est le nombre de fois que je souhaite) sur mon premier bouton qui m'incrémente et mets en memoire une variable de TEMPS en secondes. Ensuite j'appuie sur le second bouton qui allumera ma led pendant 1 seconde (encore une variable de temps qu'il faudra appeler, je suppose.)après les 7 secondes de temps choisie avec mon premier bouton.

    Est ce assez clair? Merci pour votre aide.

  4. #4
    Chtulhu

    Re : ARDUINO Exercice comptage et LED

    Citation Envoyé par Enora44 Voir le message
    Le premier code fonctionne : Dans la fonction "boutonled()" je lis l'état de mon second bouton qui, une fois activé appelle la variable "comptage" et me permet d'allumer la led le nombre de fois souhaité.
    Ok, compris

    Je m'explique avec en exemple de ce que je souhaite faire exactement : J'appuie 7 fois (cela aurait pu être 10, 23, 45...c'est le nombre de fois que je souhaite) sur mon premier bouton qui m'incrémente et mets en memoire une variable de TEMPS en secondes.
    Ok.
    Ensuite j'appuie sur le second bouton qui allumera ma led pendant 1 seconde (encore une variable de temps qu'il faudra appeler, je suppose.)après les 7 secondes de temps choisie avec mon premier bouton.
    Est ce assez clair?
    C'est là que je bloque.
    J'avais cru comprendre qu'après avoir sélectionner le nombre de secondes (donc par exemple 7), l'appui sur le second bouton aurait allumer la led 7 secondes.
    Pourquoi 1s?
    Donc ça veut dire que vous voulez allumer cette led 1s après les 7s (7s OFF et 1s ON) c'est bien ça?

  5. A voir en vidéo sur Futura
  6. #5
    Enora44

    Re : ARDUINO Exercice comptage et LED

    Oui je comprends ce que tu veux, dire. C'est vraiment pas évident d'expliquer clairement. Je vais procéder avec une chronologie :

    - J'appuie 7 fois sur le premier bouton qui incrémente une variable en temps (7 secondes)
    - J'appuie sur le second bouton qui appelle ma variable de temps.
    - Cette variable effectue un compte a rebours de 7 secondes.
    - Au bout des 7 secondes, la led s'allume 1seconde.

    Merci.

  7. #6
    Enora44

    Re : ARDUINO Exercice comptage et LED

    Citation Envoyé par Chtulhu Voir le message
    Donc ça veut dire que vous voulez allumer cette led 1s après les 7s (7s OFF et 1s ON) c'est bien ça?
    C'est exactement ca!

  8. #7
    Chtulhu

    Re : ARDUINO Exercice comptage et LED

    Ok, maintenant je vais pouvoir regarder ton code

  9. #8
    Enora44

    Re : ARDUINO Exercice comptage et LED

    Citation Envoyé par Chtulhu Voir le message
    Ok, maintenant je vais pouvoir regarder ton code
    Merci à toi Chtulhu

  10. #9
    Chtulhu

    Re : ARDUINO Exercice comptage et LED

    Ce qui vous manque c'est une base de temps "seconde".
    Une fonction qui aura un coeur battant à la seconde avec une variable (votre variable temps) qui bouclera x fois cette seconde.
    Normalement il vaut mieux utiliser une interruption pour faire cela, c'est plus propre et plus précis.

    Comme je ne me sers jamais d'arduino, on peut aussi pour s'amuser concevoir cette fonction bloquante.
    Quel est la base de temps de votre arduino?
    Et combien vaut un cycle ?

  11. #10
    Enora44

    Re : ARDUINO Exercice comptage et LED

    Qu'appelles tu base de temps?
    1 vos 1ms si c'est ce que tu souhaites.

    Pour un cycle avec 7 fois appuyer cela ferait 8000 avec le temps des une seconde.

    Je sais pas si c'est que tu souhaites savoir
    Dernière modification par Enora44 ; 21/11/2017 à 21h18.

  12. #11
    Chtulhu

    Re : ARDUINO Exercice comptage et LED

    Je vois par exemple delay(200) dans votre code, donc ici des ms.
    On peut se servir de ça pour commencer.
    Code:
    void boutonled()
    {
    
      int BP2_ACTIVE = LOW; 
      int i;
    
      ETATBP2 = digitalRead(bouton2);
    
    
      if (ETATBP2 == BP2_ACTIVE)
        {
        for (i = 0; i <= comptage; i++) 
             {
              Delay(1000); // 1s rebouclée x comptage
             }
        }
    digitalWrite (LED,HIGH); // on allume la led
    Delay(1000); // pendant une seconde
    digitalWrite (LED,LOW); // puis on éteint la led
    }
    A tester
    Dernière modification par Chtulhu ; 21/11/2017 à 21h23.

  13. #12
    Enora44

    Re : ARDUINO Exercice comptage et LED

    J'essaye ca de suite, je reviens. Merci

  14. #13
    Chtulhu

    Re : ARDUINO Exercice comptage et LED

    J'espère que votre fonction digitalRead() contient un anti-rebonds, sans quoi ça ne fonctionnera pas bien.
    C'est tout ce que je déteste avec arduino, ces fonctions opaques... alors que c'est si simple à faire directement en C.

    int en principe est une variable signée en C, si on veut quelque chose de non signé on spécifie unsigned int.
    Vérifiez quand même si vous avez la liste des déclaratifs de variables sous arduino ce sera un plus pour gagner du temps.

  15. #14
    Chtulhu

    Re : ARDUINO Exercice comptage et LED

    Petit correctif éventuellement, si vous ne voulez pas allumer la led (si aucun comptage n'a été réalisé)
    Code:
    void boutonled()
    {
    
      int BP2_ACTIVE = LOW; 
      int i;
    
      ETATBP2 = digitalRead(bouton2);
    
    
      if (ETATBP2 == BP2_ACTIVE)
        {
        for (i = 0; i <= comptage; i++) 
             {
              Delay(1000); // 1s rebouclée x comptage
             }
        
            digitalWrite (LED,HIGH); // on allume la led
            Delay(1000); // pendant une seconde
            digitalWrite (LED,LOW); // puis on éteint la led
         }
    }

  16. #15
    Enora44

    Re : ARDUINO Exercice comptage et LED

    Je viens d'essayer : la led reste allumer en permanence. lorsque j'appuie constamment sur le bouton d'incrémentation la led clignote tout en incrémenter de 1 vers l'infini.
    Les questions que je me pose : le delay bloque le programme, je pense qu'il faut utiliser la fonction millis();. Ensuite comment l'état du BP2 sait-il qu'on parle de temps sans avoir créé une variable lui imposant la fonction du temps?

    Merci.

  17. #16
    Enora44

    Re : ARDUINO Exercice comptage et LED

    Cela marche bien, merci. Maintenant je vais intégrer la fonction millis() pour éviter le delay et je poste le programme de suite. Merci de l'investissement, je reviens.

  18. #17
    Chtulhu

    Re : ARDUINO Exercice comptage et LED

    Essayez avec le 2eme code.
    Quand vous accédez à boutonLed() la led s'allume forcément avec mon premier code.
    Je vais jeter un oeil sur le reste.

  19. #18
    Chtulhu

    Re : ARDUINO Exercice comptage et LED

    Citation Envoyé par Enora44 Voir le message
    Cela marche bien, merci. Maintenant je vais intégrer la fonction millis() pour éviter le delay et je poste le programme de suite. Merci de l'investissement, je reviens.
    Ok très bien, nos messages se sont croisés.

  20. #19
    Enora44

    Re : ARDUINO Exercice comptage et LED

    Cela fonctionne bien maintenant. Pour les anti rebond, l'arduino est équipé de résistance sur ses entrées sur quoi, il suffit de lui préciser (INPUT PULL_UP) dans le set up. COmment puis je lui faire répéter la tâche? C'est à dire qu'il allumera la led et l'éteindra en boucle?

    Merci

  21. #20
    freepicbasic

    Re : ARDUINO Exercice comptage et LED

    Il faut plutôt que d'utiliser des int alors que des define peuvent faire l'affaire
    Pour l'anti rebond un while est préferable pour attendre la fin de l’appuie
    Il faut déclarer les fonctions au début
    lorsqu'on incrémente ou décrémente il faut une limite sinon 0 -1 donne soit un chiffre négatif soit le maximum de l'unsigned

    Code:
    #define bouton1  digitalRead(3)
    #define bouton2  digitalRead(4)
    #define bouton3  digitalRead(5)
    #define LED 8
    
    int comptage = 0;
    
    void Run(void);
    
    
    
    void setup() {
      // put your setup code here, to run once:
    
    }
    
    void loop() {
    
      // put your main code here, to run repeatedly:
      if (bouton1==HIGH) {
          comptage++;
          Serial.println(comptage);
          delay(200);
          if (comptage>10) comptage=8;
          while (bouton1==HIGH) ;
         }
      if (bouton2==HIGH) {
          comptage--;
          Serial.println(comptage);
          delay(200);
          if (comptage<1) comptage=1;
          while (bouton2==HIGH) ;
         }
      if (bouton3==HIGH) Run();
         
    }
    
    void Run(void) {
      int i;
      
        for (i = 0; i <= comptage; i++) {
          digitalWrite (LED, HIGH);
          delay(100);
          digitalWrite (LED, LOW);
          delay(100);
        }
    }
    Pour la seconde partie il faudrait faire 2 mode de saisie
    Pour cela il faudrait ajouter un autre bouton et une led pour indiquer dans quel mode on est.

    Pour le programme un indicateur booleen suffit

    boolean mode = 0;
    if (mode==0) {
    // nombre de flash
    }
    else {
    // temps
    }

    "temps" peut être un int sera un temps en milli secondes 32 000 fera 32 secondes
    unsigned int temps;
    delay(temps);
    A+, pat

  22. #21
    Enora44

    Re : ARDUINO Exercice comptage et LED

    Citation Envoyé par freepicbasic Voir le message
    Il faut plutôt que d'utiliser des int alors que des define peuvent faire l'affaire
    Pour l'anti rebond un while est préferable pour attendre la fin de l’appuie
    Il faut déclarer les fonctions au début
    lorsqu'on incrémente ou décrémente il faut une limite sinon 0 -1 donne soit un chiffre négatif soit le maximum de l'unsigned

    Code:
    #define bouton1  digitalRead(3)
    #define bouton2  digitalRead(4)
    #define bouton3  digitalRead(5)
    #define LED 8
    
    int comptage = 0;
    
    void Run(void);
    
    
    
    void setup() {
      // put your setup code here, to run once:
    
    }
    
    void loop() {
    
      // put your main code here, to run repeatedly:
      if (bouton1==HIGH) {
          comptage++;
          Serial.println(comptage);
          delay(200);
          if (comptage>10) comptage=8;
          while (bouton1==HIGH) ;
         }
      if (bouton2==HIGH) {
          comptage--;
          Serial.println(comptage);
          delay(200);
          if (comptage<1) comptage=1;
          while (bouton2==HIGH) ;
         }
      if (bouton3==HIGH) Run();
         
    }
    
    void Run(void) {
      int i;
      
        for (i = 0; i <= comptage; i++) {
          digitalWrite (LED, HIGH);
          delay(100);
          digitalWrite (LED, LOW);
          delay(100);
        }
    }
    Pour la seconde partie il faudrait faire 2 mode de saisie
    Pour cela il faudrait ajouter un autre bouton et une led pour indiquer dans quel mode on est.

    Pour le programme un indicateur booleen suffit

    boolean mode = 0;
    if (mode==0) {
    // nombre de flash
    }
    else {
    // temps
    }

    "temps" peut être un int sera un temps en milli secondes 32 000 fera 32 secondes
    unsigned int temps;
    delay(temps);
    Merci freepicbasic pour ta participation. Le code ne fonctionne pas et j'ai vraiment du mal à le comprendre en détail. Je comprends que les grandes lignes. Pourquoi banir les "int" je ne comprends pas. Je vais me renseigner sur boolean car je connais pas.

  23. #22
    Chtulhu

    Re : ARDUINO Exercice comptage et LED

    boolean n'existe pas en C, mais bon on en est pas à ça près.

    Quitte à tout réécrire il faudrait changer pas mal de choses.
    Je pense que ce n'est pas utile à ce stade d'apprentissage.
    Enora44 vous aurez, je l'espère, l'occasion d'apprendre à coder normalement, plus tard.

  24. #23
    Enora44

    Re : ARDUINO Exercice comptage et LED

    Je ne sais pas ce que veut dire coder normalement. Maintenant j'apprends au fur et à mesure, je suis capable de faire certaines choses simple et je me perfectionne tous les jours. Je suis seule et la seule aide que j'ai, ce sont les forums.

  25. #24
    Chtulhu

    Re : ARDUINO Exercice comptage et LED

    Si c'est pas indiscret, vous faites ça pour votre plaisir ou pour vous perfectionner?

  26. #25
    Enora44

    Re : ARDUINO Exercice comptage et LED

    Je fais ca pour me faire plaisir, car je souhaite m'en servir dans un petit projet par la suite. Pour me perfectionner je lis les bases (for, else, if, while......) mais c'est très long. Donc en même temps je m'exerce et je me fais plaisir avec des petits projets en tête.

  27. #26
    Chtulhu

    Re : ARDUINO Exercice comptage et LED

    Citation Envoyé par Enora44 Voir le message
    Je ne sais pas ce que veut dire coder normalement.
    Un langage informatique s'apprend comme toutes autres langues, syntaxe, vocabulaire, structure.
    Ce n'est pas le cas avec arduino, qui est en gros un patois, comme le patois auvergnat par exemple
    Si je vous dis "balier" et bien en patois auvergnat ça veut dire "balayer".
    Et bien en langage arduino c'est du même niveau, ils ont créé un pseudo langage censé faciliter l'apprentissage, pour contourner le vrai langage C censé être plus compliqué.
    En réalité c'est bidon, le but étant de vendre des plate-formes (shields) et de vous mettre un fil à la patte.

    Un langage structuré comme le C permet de porter du code vers d'autres µC, ce qui est impossible avec arduino.
    Donc c'est malin, commercialement parlant, mais contre productif car personne n'utilise ça dans le métier...
    Bref, je ne vais pas vous couper l'appétit, si vous faites ça pour votre plaisir et loisirs il n'y a pas de problème vous n'êtes pas concernée par ce que je vous dis

    Vous trouverez ici bon nombre d'arduinistes qui sauront vous aider dans votre apprentissage.
    Bonne continuation.
    Dernière modification par Chtulhu ; 21/11/2017 à 23h27.

  28. #27
    Enora44

    Re : ARDUINO Exercice comptage et LED

    Cela ne me concerne pas effectivement. Je ne suis pas la pour débattre un langage qui est plus compliqué q'un autre, ou qui se transforme en patois. Si je vous parle de mon métier et de ce que vous connaissez peut être et je dis bien peut être car je ne vous connais pas, cela vous semblera sûrement le futur pour vous. Maintenant je cherche à faire un petit projet dans lequel je suis bloquée en cherchant une solution et une aide.

  29. #28
    freepicbasic

    Re : ARDUINO Exercice comptage et LED

    Arduino Boolean;
    https://www.arduino.cc/reference/en/...types/boolean/
    L'exemple a été compiler OK, Donc avec un truc qui n'existe pas ça serait difficile LOL.
    Il faut le compléter 'essayer...

    Le type Boolean existe C++ !
    Arduino c'est du C++ pas du C !

    0 = false
    1 = true

    Si le but est d'apprendre, il suffit d'appliquer les conseils et les exemples que j'ai donné.
    A+, pat

  30. #29
    Chtulhu

    Re : ARDUINO Exercice comptage et LED

    Non revoyez vos bases, le type boolean n'existe pas en C ANSI, c'est un type créer à partir d'un octet donc un char.
    Et du C++ pour un µC 8 bits c'est du grand n'importe quoi également.

  31. #30
    Chtulhu

    Re : ARDUINO Exercice comptage et LED

    Citation Envoyé par freepicbasic Voir le message

    Si le but est d'apprendre, il suffit d'appliquer les conseils et les exemples que j'ai donné.
    J'en doute fort, désolé.

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. [Programmation] Comptage/Decomptage Arduino Code Difficulté
    Par armelito60 dans le forum Électronique
    Réponses: 2
    Dernier message: 14/11/2017, 16h42
  2. [Programmation] fonction comptage de temps arduino
    Par kaky951357 dans le forum Électronique
    Réponses: 0
    Dernier message: 13/02/2016, 13h50
  3. Carte Arduino UNO R3 ou Arduino Mega 2560 R3 ?
    Par theoze dans le forum Électronique
    Réponses: 10
    Dernier message: 11/03/2015, 15h36
  4. Communication arduino-arduino avec module Xbee
    Par TPESI22012 dans le forum Électronique
    Réponses: 2
    Dernier message: 23/12/2013, 17h24
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...