eavel
Posts: 5
Joined: Tue Apr 09, 2013 11:32 am

[resolu] Filtrer les rebonds d'un bouton

Sat Jun 01, 2013 5:44 pm

Bonjour,

Pour détecter l'appuie sur un bouton connecté au GPIO j'utilise un évenement en python dont voici le code :

Code: Select all

GPIO.setup(23,GPIO.IN, pull_up_down=GPIO.PUD_UP)

def my_callback(channel):
        global busy
        global sequence
        var=1
        if busy==0:
                busy=1
                print "sequence"

                if sequence==3:
                        sequence=1
                else :
                        sequence=sequence+1
                while var<=5 :
                        time.sleep(0.5)
                        var=var+1
                busy=0

GPIO.add_event_detect(23, GPIO.RISING, callback=my_callback)
J'ai déjà effectué un premier filtre grâce à la variable globale busy. Elle permet d'indiquer qu'il y a déjà un appuie qui est en cours de traitement mais j'ai toujours un rebond qui arrive à passer.

si quelqu'un à une idée...
Merci ;)
Last edited by eavel on Mon Jun 03, 2013 12:15 pm, edited 1 time in total.

mickyway
Posts: 44
Joined: Sun Oct 21, 2012 10:45 am
Location: Loire Atlantique

Re: Filtrer les rebonds d'un bouton

Sat Jun 01, 2013 10:43 pm

Pourquoi ne pas utiliser un condensateur pour filtrer directement ton entrée GPIO ? Ca serait plus efficace à mon avis

eavel
Posts: 5
Joined: Tue Apr 09, 2013 11:32 am

Re: Filtrer les rebonds d'un bouton

Sun Jun 02, 2013 9:55 am

Pourquoi pas mais je débute en électronique, je ne saurais pas quoi choisir...

lhoic
Posts: 14
Joined: Wed Sep 19, 2012 1:16 pm
Location: Auterive, France

Re: Filtrer les rebonds d'un bouton

Sun Jun 02, 2013 3:18 pm

Bonjour,

Pour un condensateur, un simple 100nF (mais en fait la valeur n'est pas critique) devrait convenir. Il faut le mettre en parallèle de ton bouton.
Il absorbera et restituera alors de l'énergie lors des changements d'états rapide qui se créaient lors de l'appui sur le bouton.

Si ce n'est pas déjà le cas , une résistance pourra peut-être être nécessaire pour y connecter le bouton avant la tension direct.
A titre informatif, on se retrouvera alors avec un filtre passe-bas RC dont la fréquence de coupure est de f = 1 / 2*Pi*R*C.

eavel
Posts: 5
Joined: Tue Apr 09, 2013 11:32 am

[Résolu] Filtrer les rebonds d'un bouton

Mon Jun 03, 2013 12:12 pm

Bonjour,

Merci pour vos réponses,
J'ai trouvé sur la page http://raspi.tv/tag/interrupts-in-python-with-rpi-gpio, le moyen de le faire par logiciel. Il faut avoir la dernière version de la librairie : RPi.GPIO.
Lors de la déclaration de l’événement il faut ajouter :

Code: Select all

bouncetime=500
où 500 est exprimé en millisecondes.

ex :

Code: Select all

GPIO.add_event_detect(channel, GPIO.RISING, callback=my_callback, bouncetime=500)

Return to “Français”