[Programmation] [Arduino] compter combien de fois on a appuyé sur une suite boutons
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 41

[Arduino] compter combien de fois on a appuyé sur une suite boutons



  1. #1
    nathanmart

    [Arduino] compter combien de fois on a appuyé sur une suite boutons


    ------

    Bonjour à tous.
    J'essaye d'écrire un programme Arduino qui compterait combien en fois on a appuyé sur une suite boutons.
    En fait il faudrait:

    Si le bouton 1 est pressé;
    Attendre que le bouton 2 soit pressé;
    Ajouter +1 a la variable compteur.

    Mais je ne sait pas comment faire.
    J'ai cherché, mais je n'ai rien trouvé...
    Pourriez-vous m'aider?

    -----

  2. #2
    Yoruk

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    Salut,

    Les interruptions peuvent t'aider....!

    Voir aussi du coté des exemples fournis...
    La robotique, c'est fantastique !

  3. #3
    nathanmart

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    J'avais déjà vue cette explication mais je n'est pas très bien compris...

  4. #4
    Yoruk

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    Une interruption est en gros un bout de code qui va s'exécuter dès qu'un évènement particulier est détecté. Il y a les interruptions internes, provoquées par le microcontrôleur, et les externes, liées à un changement d'état sur une entrée par exemple.

    Dans ton cas, ton bouton à surveiller doit déclencher une interruption externe sur l'entrée à laquelle il est relié. Le code lié à cette interruption aura pour rôle d'incrémenter ta variable...

    L'arrivée d'une interruption interrompt l'exécution "normale" du programme pour basculer sur le code de l’interruption. Une fois cette dernière traitée, le programme continue là où il s'était interrompu !

    Après dans le cas d'un bouton, attention aux rebonds...!

    Tu as étudié les exemples fournis ?
    La robotique, c'est fantastique !

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

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    Donc ça devrait donner cela?

    Code:
    const byte boutonUn = 2 ;
    const byte boutonDeux = 3 ;
    int compteur = 0 ;
    
    void setup (){
        
        pinMode(boutonUn,INPUT_PULLUP);
        pinMode(boutonDeux,INPUT_PULLUP);
        
        attachInterrupt(digitalPinToInterrupt(boutonUn ),Ajout,RISING*);
         attachInterruot ( digitalPinToInterrupt ( boutonDeux) , Retrait, RISING);
        }
    void loop(){}
    
    void Ajout (){
        attachInterrupt ( digitalPinToInterrupt ( boutonDeux), AjoutDeux, RISING);
    }
    void Retrait(){
        
    attachInterrupt(digitalPinToInterrupt(boutonUn),RetraitDeux,RISING);
        }
    
    void AjoutDeux(){
        compteur++;
    }
    void RetraitDeux(){
        compteur--;
    }
    Dernière modification par Antoane ; 08/07/2016 à 16h21. Motif: Ajout balises code

  7. #6
    Yoruk

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    A froid et sans connaitre le câblage, oui. Je ne sais plus s'il est nécessaire de mettre un return ou similaire en sortie de la sub d'interruption, faut tester...!

    Après attention ta boule loop ne fait rien !
    La robotique, c'est fantastique !

  8. #7
    nathanmart

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    Merci pour l'aide.
    Je ne peut pas tester tout de suite.
    Je pourrais au plus tôt ce soir ou demains.

  9. #8
    Yoruk

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    Après attention, ton code ne respecte pas tout à fait ta demande en #1... Tu vas devoir ajouter quelques conditions à ton code d'interruption !
    La robotique, c'est fantastique !

  10. #9
    nathanmart

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    Citation Envoyé par Yoruk Voir le message
    Après attention, ton code ne respecte pas tout à fait ta demande en #1... Tu vas devoir ajouter quelques conditions à ton code d'interruption !
    C'est à dire?

  11. #10
    maxpeigne

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    Citation Envoyé par nathanmart Voir le message
    Si le bouton 1 est pressé;
    Attendre que le bouton 2 soit pressé;
    Ajouter +1 a la variable compteur.
    En gros tu comptes +1 lorsque tes 2 boutons sont appuyés?
    Dans ce cas c'est faisable sans interruption:
    Code:
    // constants won't change. They're used here to
    // set pin numbers:
    const int buttonPin1 = 2;     // the number of the pushbutton pin
    const int buttonPin2 = 3;     // the number of the pushbutton pin
    
    // variables will change:
    int compteur = 0;         // variable compteur
    
    void setup() {
      // initialize the pushbutton pin as an input:
      pinMode(buttonPin1, INPUT);
      pinMode(buttonPin2, INPUT);
    }
    
    void loop() {
      // read the state of the pushbutton value:
      if (digitalRead(buttonPin1) && digitalRead(buttonPin2)) {
        compteur = compteur +1;
      }
    
    }

  12. #11
    nathanmart

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    Non, il faut que sesoit quand le bouton 1 est allumé PUIS le bouton 2, et inversement.

  13. #12
    Yoruk

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    Il te faut donc 2 conditions imbriquées

    Code:
    Si bouton 1 appuyé alors
    
            si bouton 2 appuyé alors incrémenter
    
    fin si
    La robotique, c'est fantastique !

  14. #13
    Yvan_Delaserge

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    Une manière efficace de programmer ce type de comportement est de créer ce que l'on appelle une machine à états.
    Dans ton cas, on définit 3 états numérotés 0, 1 et 2.
    Au démarrage du microcontrôleur, la machine est à l'état zéro.
    Si aucun des deux boutons n'est pressé, la machine reste dans l'état zéro.
    Si le bouton 1 est pressé, elle passe à l'état 1
    Si elle est dans l'état 1 et que le bouton 2 est pressé elle passe à l'état 2.

    Il reste à fixer à quelles conditions on passe d'un état dans l'autre et ce que le microcontrôleur doit faire lors qu'il arrive dans chacun des états définis.

    Dans le cas de l'Arduino, une manière simple et pratique de créer une machine à états est l'instruction case.
    La boucle loop tourne en permanence. Si l'appui sur les boutons se fait par un opérateur humain, il est de durée suffisante pour pouvoir se passer des interruptions.
    L'utilisation de l'approche " machine à états" pourra probablement aussi dans le cas particulier, permettre de se passer de la gestion des rebonds des contacts.
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  15. #14
    Yoruk

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    Citation Envoyé par Yvan_Delaserge Voir le message
    Une manière efficace de programmer ce type de comportement est de créer ce que l'on appelle une machine à états.
    C'est un grafcet en fait ?
    La robotique, c'est fantastique !

  16. #15
    Yvan_Delaserge

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    Le principe est similaire à un grafcet.

    Voici un organigramme de la machine à états préconisée dans la présente application:

    Nom : STATEMAC.gif
Affichages : 1315
Taille : 5,4 Ko

    A l'allumage du microcontrôleur, on est à l'état E0.

    Si on appuie sur le bouton 2, on reste dans le même état.
    si on appuie sur le bouton 1, on passe dans l'état 1 et on y reste, quel que soit le nombre de fois qu'on appuie sur le bouton 1. Le bouton n'a donc pas besoin de traitement anti-rebond.
    Si on appuie sur le bouton 2, on passe à l'état 2 et c'est là que le processeur va accomplir la tâche demandée, puis il va directement à l'état 0, où il reste même si le bouton 2 est actionné un nombre quelconque de fois. Le bouton 2 n'a donc pas non plus besoin d'anti-rebond.
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  17. #16
    nathanmart

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    Citation Envoyé par Yvan_Delaserge Voir le message
    Le principe est similaire à un grafcet.

    Voici un organigramme de la machine à états préconisée dans la présente application:

    Pièce jointe 318569

    A l'allumage du microcontrôleur, on est à l'état E0.

    Si on appuie sur le bouton 2, on reste dans le même état.
    si on appuie sur le bouton 1, on passe dans l'état 1 et on y reste, quel que soit le nombre de fois qu'on appuie sur le bouton 1. Le bouton n'a donc pas besoin de traitement anti-rebond.
    Si on appuie sur le bouton 2, on passe à l'état 2 et c'est là que le processeur va accomplir la tâche demandée, puis il va directement à l'état 0, où il reste même si le bouton 2 est actionné un nombre quelconque de fois. Le bouton 2 n'a donc pas non plus besoin d'anti-rebond.
    Merci beaucoup Yvan_Delaserge.
    Je vais étudier ça.J'envoie un message dès que j'ai fait le programme.

  18. #17
    mag1

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    Bonjour,

    Pour info, un programme qui répond (je pense) à la question, en basic avec un petit picaxe
    Une boucle de trois lignes (vite fait).
    Code:
    #picaxe 08M2
    ;nom des poussoirs
    symbol pous1=pinC.1	;poussoir 1 sur broche C.1
    symbol pous2=pinC.2
    
    Do
    	Do loop while pous1=0	;pous1=1 si appuyé
    	do loop while pous2=0
    	gosub tache
    loop
    
    tache:
    ; prog de la tâche
    return
    MM
    Dernière modification par mag1 ; 11/07/2016 à 10h08.
    Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...

  19. #18
    nathanmart

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    Citation Envoyé par mag1 Voir le message
    Bonjour,

    Pour info, un programme qui répond (je pense) à la question, en basic avec un petit picaxe
    Une boucle de trois lignes (vite fait).
    Code:
    #picaxe 08M2
    ;nom des poussoirs
    symbol pous1=pinC.1	;poussoir 1 sur broche C.1
    symbol pous2=pinC.2
    
    Do
    	Do loop while pous1=0	;pous1=1 si appuyé
    	do loop while pous2=0
    	gosub tache
    loop
    
    tache:
    ; prog de la tâche
    return
    MM
    Le problème avec les picaxes, c'est que je n'y connais rien.
    Du coup, je ne peux pas le modifier ou l'améliorer...

  20. #19
    mag1

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    Citation Envoyé par nathanmart Voir le message
    Le problème avec les picaxes, c'est que je n'y connais rien.
    Du coup, je ne peux pas le modifier ou l'améliorer...
    Si le problème est là....c'est plus simple que tout le reste
    http://electromag1.wifeo.com/les-pic...leur-basic.php

    MM
    Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...

  21. #20
    Yvan_Delaserge

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    ça, ça devrait le faire...

    Code:
      
    const byte boutonUn = 2 ;
    const byte boutonDeux = 3 ;
    int compteur = 0 ;
    int etat = 0 ;
    
    void setup (){
        
        pinMode(boutonUn,INPUT_PULLUP);
        pinMode(boutonDeux,INPUT_PULLUP);
    
        }
    void loop(){
      switch (etat) {
        case 0:
          if (digitalRead(boutonUn) == LOW)
    {
      etat=1;
    }
          break;
        case 1:
          if (digitalRead(boutonDeux) == LOW)
    {
      etat=2;
    }
          break;
        case 2:
          compteur++;
          etat=0;
          break;
        }
    }
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  22. #21
    Antoane
    Responsable technique

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    Bonjour,

    Si je ne m'abuse:
    Citation Envoyé par Yoruk Voir le message
    C'est un grafcet en fait ?
    Le grafcet est un langage de programmation (comme le C, Java...), la machine d'état permet de représenter un système (uniquement s'il est représentable par une machine d'état).
    Le système peut se trouver dans plusieurs "boites d'actions" différentes d'un grafcet (e.g. en sortie d'une bifurcation OU), mais dans un unique état de machine d'état.
    C'est un détail, cf. le forum d'info pour plus de rigueur.


    Pour info, un programme qui répond (je pense) à la question, en basic avec un petit picaxe
    Une boucle de trois lignes (vite fait).
    En même temps, 2 boucles imbriquées, c'est quelques lignes dans quasiment tous les langages de programmation
    Le programme donné par Yvan, pour arduino, code une vraie machine à états, d'où sa relative "complexité".
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  23. #22
    mag1

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    Citation Envoyé par Antoane Voir le message

    En même temps, 2 boucles imbriquées, c'est quelques lignes dans quasiment tous les langages de programmation
    Oui, bien sûr, c'est plus pour la méthode (simple) que pour le matériel, qui peut être n'importe quoi, j'aurais dû le préciser

    MM
    Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...

  24. #23
    antek

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    Citation Envoyé par Antoane Voir le message
    Le grafcet est un langage de programmation (comme le C, Java...), . . .
    Le grafcet est d'abord un outil de description et d'analyse.
    Un fabricant a appelé "grafcet" un langage pour API.

  25. #24
    Yvan_Delaserge

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    Si on appuie sur le bouton 1, il passe dans la seconde boucle, mais quel serait le comportement si on appuie de nouveau sur le bouton 1, par exemple en cas de rebond du contact 1?

    Il retourne dans la première boucle? Ou bien est-ce qu'il ne lit plus que le bouton 2 lorsqu'il est dans la deuxième boucle? Et donc qu'il reste dans cette dernière?
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  26. #25
    mag1

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    Non, le rebond, on s'en fiche, c'est le premier front qui déclenche la sortie de chaque boucle
    Un programme est a sens unique, il ne revient pas en arrière (enfin, pas tout seul)

    MM
    Dernière modification par mag1 ; 11/07/2016 à 13h50.
    Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...

  27. #26
    Yoruk

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    Citation Envoyé par antek Voir le message
    Le grafcet est d'abord un outil de description et d'analyse.
    Un fabricant a appelé "grafcet" un langage pour API.
    J'ignorais que c'était aussi un langage de programmation ! C'est source de confusion...!
    La robotique, c'est fantastique !

  28. #27
    nathanmart

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    Citation Envoyé par Yvan_Delaserge Voir le message
    ça, ça devrait le faire...

    Code:
      
    const byte boutonUn = 2 ;
    const byte boutonDeux = 3 ;
    int compteur = 0 ;
    int etat = 0 ;
    
    void setup (){
        
        pinMode(boutonUn,INPUT_PULLUP);
        pinMode(boutonDeux,INPUT_PULLUP);
    
        }
    void loop(){
      switch (etat) {
        case 0:
          if (digitalRead(boutonUn) == LOW)
    {
      etat=1;
    }
          break;
        case 1:
          if (digitalRead(boutonDeux) == LOW)
    {
      etat=2;
    }
          break;
        case 2:
          compteur++;
          etat=0;
          break;
        }
    }
    Merci pour ce programme.
    Il faut cependant que je l'améliore.
    Là,il ne fait qu'incrémenter une variable lors de l'appui du bouton 1 puis 2.
    Mais mon but est aussi de pouvoir faire l'inverse,lorsque le bouton 2 puis 1 sont pressés , dé-crémenter (je sait pas si ça existe comme mot).
    De ce fait, ça rajoute beaucoup de contraintes.

  29. #28
    mag1

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    Et il n'y a pas un délai entre les appuis pour resetter le système? des fois...

    Et si on fait 1-2-1 ou 1-2-2-1 , ça fait quoi ?

    MM
    Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...

  30. #29
    Yvan_Delaserge

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    L'organigramme de la machine à états doit être modifié comme ceci:
    Nom : STAMACH2.gif
Affichages : 1223
Taille : 8,0 Ko
    On ajoute deux états supplémentaires E3 et E4: le fonctionnement est symétrique par rapport au premier organigramme.
    Lorsqu'on arrive à l'état E4, on décrémente le compteur et on retourne à l'état d'attente E0.

    Mais dans cette situation, il faudra prendre soin de s'occuper des rebonds des contacts, si on veut un fonctionnement stable.

    @ mag1: Comment coderais-tu ça avec un picaxe et des boucles?

    Même question pour les combinaisons 1-2-1 ou 1-2-2-1?
    Dernière modification par Yvan_Delaserge ; 11/07/2016 à 15h11.
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  31. #30
    Antoane
    Responsable technique

    Re : [Arduino] compter combien de fois on a appuyé sur une suite boutons

    Citation Envoyé par Yoruk Voir le message
    J'ignorais que c'était aussi un langage de programmation ! C'est source de confusion...!
    Non, j'ignorais que c'était avant tout un outil de description et d'analyse
    Merci.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. [Programmation] programmation arduino + schiel LCD/boutons
    Par c4madmig dans le forum Électronique
    Réponses: 0
    Dernier message: 29/12/2015, 12h07
  2. Gestion boutons arduino
    Par mayonaise dans le forum Électronique
    Réponses: 10
    Dernier message: 21/10/2013, 18h04
  3. [Blanc] Combien de fois par heure en moyenne un frigo tourne t il ?
    Par invite2ed708f5 dans le forum Dépannage
    Réponses: 7
    Dernier message: 13/02/2008, 19h21
  4. Combien de fois 1 clé de cryptage est plus forte qu'une autre?
    Par invite29f30bce dans le forum Internet - Réseau - Sécurité générale
    Réponses: 2
    Dernier message: 16/12/2007, 22h26
Découvrez nos comparatifs produits sur l'informatique et les technologies.