Python / Raspeberry / Compter impulsions bouton
Répondre à la discussion
Affichage des résultats 1 à 17 sur 17

Python / Raspeberry / Compter impulsions bouton



  1. #1
    ludo1919

    Python / Raspeberry / Compter impulsions bouton


    ------

    Bonjour à tous,

    je débute en python... (hier, lol),
    et je souhaite compter le nombre d'impulsions que j'effectue sur un bouton. Or jusqu'ici mon "compteur" comptabilise ce qui semble être le nombre de millisecondes durant lesquelles j'appuie sur ce bouton! Deux leds témoignent de l'état de "true" ou "false", de ce coté, ça fonctionne...
    Quelqu'un pourrait-il me mettre sur la piste par hasard??

    merci par avance!


    Code:
    import RPi.GPIO as GPIO
    
    GPIO.setmode(GPIO.BCM)
    LEDV = 17
    LEDR = 24
    INPT = 23
    
    GPIO.setup(LEDV, GPIO.OUT)
    GPIO.setup(LEDR, GPIO.OUT)
    GPIO.setup(INPT, GPIO.IN, pull_up_down=GPIO.PUD_UP)
    COMPTEUR = 0
    
    while True:
        if ( GPIO.input( INPT ) == False):
            GPIO.output(LEDR, True)
            GPIO.output(LEDV, False)
            COMPTEUR += 1
            print COMPTEUR
        else:
            GPIO.output(LEDR, False)
            GPIO.output(LEDV, True)
    
    GPIO.cleanup()

    -----

  2. #2
    Jack
    Modérateur

    Re : Python / Raspeberry / Compter impulsions bouton

    C'est un grand classique

    Le programme tourne dans la boucle while tant que tu appuies sur le bouton. Si tu veux compter les impulsions, il faut d'abord détecter le relâchement.

  3. #3
    ludo1919

    Re : Python / Raspeberry / Compter impulsions bouton

    merci pour votre réponse!

    Oui je le doute que c'est basique.
    Néanmoins, je ne visualise pas bien ce que cela implique au niveau code... un petit indice en plus ne serais pas de refus !

    Merci encore

  4. #4
    Jack
    Modérateur

    Re : Python / Raspeberry / Compter impulsions bouton

    Citation Envoyé par ludo1919 Voir le message
    Néanmoins, je ne visualise pas bien ce que cela implique au niveau code... un petit indice en plus ne serais pas de refus !

    Merci encore
    Je viens de le donner:
    Code:
    if ( GPIO.input( INPT ) == False):
    détecte l'appui sur le bouton. L'exécution de la boucle continue tant que tu restes appuyé, et le compteur s'incrémente donc.
    Il faut absolument bloquer la boucle tant que tu n'as pas relâché le bouton.

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

    Re : Python / Raspeberry / Compter impulsions bouton

    En premier lieu j'ai remplacé mon "if" par un "while", mais cela a donné qqch de similaire. J'ai finalement placé un "break" après "print". Je peux donc comptabiliser une pression! C'est déjà pas mal ? Néanmoins je dois manquer de neurones et n'ai pas assez de vocabulaire dans ce langage.
    Auriez-vous une solution plus "efficace"?
    Merci

  7. #6
    Jack
    Modérateur

    Re : Python / Raspeberry / Compter impulsions bouton

    En premier lieu j'ai remplacé mon "if" par un "while"
    Bonne idée. Tu viens donc de faire une boucle qui attend l'appui. Tu fais suivre maintenant par une boucle qui attend le relâchement.

    A+

  8. #7
    ludo1919

    Re : Python / Raspeberry / Compter impulsions bouton

    je doit être plus limité que ce que je pensait...!
    l'action escompté n'est pas plus au rendez-vous. J'obtiens maintenant le nombre de millisecondes pendant lesquelles je n'appuie pas sur ce malheureux bouton.
    Mais où donc se situe mon erreur ou incompréhension??!
    Merci

    Code:
    import RPi.GPIO as GPIO
    
    GPIO.setmode(GPIO.BCM)
    LEDV = 17
    LEDR = 24
    INPT = 23
    
    GPIO.setup(LEDV, GPIO.OUT)
    GPIO.setup(LEDR, GPIO.OUT)
    GPIO.setup(INPT, GPIO.IN, pull_up_down=GPIO.PUD_UP)
    COMPTEUR = 0
    
    while True:
        while ( GPIO.input( INPT ) == False):
            GPIO.output(LEDR, True)
            GPIO.output(LEDV, False)
                while ( GPIO.input( INPT ) == True):
                    COMPTEUR += 1
                    print COMPTEUR
    
    GPIO.cleanup()

  9. #8
    Jack
    Modérateur

    Re : Python / Raspeberry / Compter impulsions bouton

    Je ne suis pas sûr de la syntaxe en python, mais essaie ceci:
    Code:
    import RPi.GPIO as GPIO
    
    
    GPIO.setmode(GPIO.BCM)
    LEDV = 17
    LEDR = 24
    INPT = 23
    
    
    GPIO.setup(LEDV, GPIO.OUT)
    GPIO.setup(LEDR, GPIO.OUT)
    GPIO.setup(INPT, GPIO.IN, pull_up_down=GPIO.PUD_UP)
    COMPTEUR = 0
    
    
    while True:
        while ( GPIO.input( INPT ) == False):
        GPIO.output(LEDR, True)
        GPIO.output(LEDV, False)
        while ( GPIO.input( INPT ) == True):
        GPIO.output(LEDR, False)
        GPIO.output(LEDV, True)
        COMPTEUR += 1
        print COMPTEUR
    
    
    GPIO.cleanup()
    Je ne sais pas si c'est l'effet escompté, mais j'ai inversé l'état des leds selon l'état du bouton

    PS:J'ai supprimé volontairement l'indentation.

  10. #9
    ludo1919

    Re : Python / Raspeberry / Compter impulsions bouton

    Merci!

    J'évite donc d'insérer les boucles dans les boucles (!) néanmoins j'ai laissé les indentations appliquées aux arguments à l'intérieur de chaque bloc while : sinon j'ai une erreur de type "unexpected indentation...".

    Concernant le résultat, il y a du mieux : le temps durant lequel j'appuie (ou n'appuie pas) sur le bouton n'est plus affiché en live. Ce qui fait que je n'ai qu'une valeur à chaque pression du bouton, ouf...
    Par contre, au final mon "print" affiche toujours le temps pendant lequel je n'ai pas effectué de pression sur le fameux bouton au lieu d'incrémenter le nombre de fois ou j'ai appuyé dessus!
    J'avoue ça me dépasse, et je n'ai pas trouvé de problème qui m'ai semblé similaire sur le net. Je doute que cela soit impossible, il doit y avoir une astuce que je ne saisie pas??
    merci encore

  11. #10
    Jack
    Modérateur

    Re : Python / Raspeberry / Compter impulsions bouton

    Montre ton code actuel

  12. #11
    ludo1919

    Re : Python / Raspeberry / Compter impulsions bouton

    Le voici :
    Je reconnais que dans ma logique j'aurais également du indenter "print", mais cela ne change rien au résulat... et inverse juste le moment durant lequel le résultat est imprimé.

    Code:
    import RPi.GPIO as GPIO
    
    GPIO.setmode(GPIO.BCM)
    LEDV = 17
    LEDR = 24
    INPT = 23
    
    GPIO.setup(LEDV, GPIO.OUT)
    GPIO.setup(LEDR, GPIO.OUT)
    GPIO.setup(INPT, GPIO.IN, pull_up_down=GPIO.PUD_UP)
    COMPTEUR = 0
    
    
    while True:
        while ( GPIO.input( INPT ) == False):
            GPIO.output(LEDR, True)
            GPIO.output(LEDV, False)
        while ( GPIO.input( INPT ) == True):
            GPIO.output(LEDR, False)
            GPIO.output(LEDV, True)
            COMPTEUR += 1
        print COMPTEUR
    
    GPIO.cleanup()

  13. #12
    Jack
    Modérateur

    Re : Python / Raspeberry / Compter impulsions bouton

    Il ne faut surtout pas mettre COMPTEUR += 1 dans la boucle d'attente du relâchement, c'est évident.
    Tu supprimes donc une tabulation devant cette ligne ou mieux, essaie avec mon programme qui modifie le précédent (je ne savais pas comment faire une instruction vide toute à l'heure)
    Code:
    import RPi.GPIO as GPIO
    
    
    
    
    GPIO.setmode(GPIO.BCM)
    LEDV = 17
    LEDR = 24
    INPT = 23
    
    
    
    
    GPIO.setup(LEDV, GPIO.OUT)
    GPIO.setup(LEDR, GPIO.OUT)
    GPIO.setup(INPT, GPIO.IN, pull_up_down=GPIO.PUD_UP)
    COMPTEUR = 0
    
    
    
    
    while True:
        while ( GPIO.input( INPT ) == False):
            pass
        GPIO.output(LEDR, True)
        GPIO.output(LEDV, False)
        while ( GPIO.input( INPT ) == True):
            pass
        GPIO.output(LEDR, False)
        GPIO.output(LEDV, True)
        COMPTEUR += 1
        print COMPTEUR
    
    
    
    
    GPIO.cleanup()
    Dernière modification par Jack ; 26/05/2014 à 16h53.

  14. #13
    ludo1919

    Re : Python / Raspeberry / Compter impulsions bouton

    Ca fonctionne, super et merci!
    Par curiosité, l'instruction vide, c'est pass? que fait-elle exactement?
    merci!

  15. #14
    Jack
    Modérateur

    Re : Python / Raspeberry / Compter impulsions bouton

    Citation Envoyé par ludo1919 Voir le message
    Par curiosité, l'instruction vide, c'est pass? que fait-elle exactement?
    Bin rien justement. La boucle n'a rien d'autre à faire que d'attendre que le bouton change d'état.

  16. #15
    ludo1919

    Re : Python / Raspeberry / Compter impulsions bouton

    Merci encore!

    Est-il possible d'appliquer un statut résolu?
    Bonne fin de journée

  17. #16
    JPL
    Responsable des forums

    Re : Python / Raspeberry / Compter impulsions bouton

    Ce n'est pas prévu dans ce forum.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  18. #17
    Jack
    Modérateur

    Re : Python / Raspeberry / Compter impulsions bouton

    non, pas sur futura.
    A bientôt peut-être

Discussions similaires

  1. Compter impulsions flowcode
    Par bobynours dans le forum Électronique
    Réponses: 4
    Dernier message: 19/03/2015, 11h32
  2. Réponses: 15
    Dernier message: 01/07/2011, 08h44
  3. Compter des impulsions avec un pic
    Par Kmicaz dans le forum Électronique
    Réponses: 30
    Dernier message: 30/03/2010, 18h32
  4. Compter des impulsions avec une carte K8055 (Velleman)
    Par matt3003 dans le forum Électronique
    Réponses: 9
    Dernier message: 04/02/2009, 14h55
  5. bouton d'urgence ou bouton tactile?
    Par devilhacker dans le forum Électronique
    Réponses: 31
    Dernier message: 13/02/2007, 23h28