Modifications

Sauter à la navigation Sauter à la recherche
2 141 octets ajoutés ,  13 juin 2016 à 18:13
Ligne 244 : Ligne 244 :  
Vous pouvez télécharger le fichier '''debounce.py''' et le placer directement dans le répertoire {{fname|/flash/lib/}} de votre WiPy.
 
Vous pouvez télécharger le fichier '''debounce.py''' et le placer directement dans le répertoire {{fname|/flash/lib/}} de votre WiPy.
   −
{{traduction}}
+
{{download-box|Téléchargez debounce.py|http://df.mchobby.be/wipy/debounce.py}}
    
[[Fichier:Hack-wipy-button-debounce.jpg|800px]]
 
[[Fichier:Hack-wipy-button-debounce.jpg|800px]]
    +
Voici comment exploiter la classe {{fname|PullUpButton}}, cet exemple attends que le bouton soit presser 5x pour sortir de la boucle de comptage.
    +
<syntaxhighlight lang="python">
 +
from debounce import PullUpButton
 +
import time
 +
 +
btn = PullUpButton( 'GP8' )
 +
 +
counter=0
 +
while counter < 5:
 +
    print( 'presser le bouton svp' )
 +
    while not btn.is_pressed():
 +
        time.sleep_ms( 100 )
 +
    counter=counter+1
 +
    print( 'counter = %i' % counter )
 +
</syntaxhighlight>
 +
 +
ce qui produit le résultat suivant après '''exactement''' 5 pressions physiques sur le bouton... les rebonds de contact ne viennent plus nous importuner.
 +
 +
<nowiki>presser le bouton svp
 +
counter = 1
 +
presser le bouton svp
 +
counter = 2
 +
presser le bouton svp
 +
counter = 3
 +
presser le bouton svp
 +
counter = 4
 +
presser le bouton svp
 +
counter = 5</nowiki>
 +
 +
==== Classe PullUpButton ====
 +
Pour les plus curieux, voici l'implémentation de la classe {{fname|PullUpButton}} que vous trouverez dans le fichier {{fname|debounce.py}}.
 +
 +
Vous pouvez clairement y voir une seconde relecture de l'entrée après un délais de 10 millisecondes. C'est là qu'intervient le déparasitage logicielle de l'entrée.
 +
 +
<syntaxhighlight lang="python">
 +
from machine import Pin
 +
import time
 +
 +
class PullUpButton:
 +
    """ Classe pour gérer un bouton pull-up sur une broche X.
 +
        Détecte lorsque la broche passe à 0 """
 +
    p = None # Pin object
 +
    state = None # Last known state
 +
 +
    def __init__( self, button_pin ):
 +
        self.p = Pin( button_pin, Pin.IN, pull=Pin.PULL_UP )
 +
        self.state = self.p.value()
 +
   
 +
    def is_pressed(self):
 +
        """ vérifie si le bouton est pressé / détecte le changement
 +
    d'état. Ne sera signalé qu'une seule fois! """
 +
        val = self.p.value()
 +
        result = False
 +
        if val != self.state:
 +
            # relecture dans 10 ms (deboucing)
 +
            time.sleep_ms( 10 )
 +
            val2 = self.p.value()
 +
            if val == val2: # valeur stable :)
 +
                self.state = val
 +
                result = (val == 0) # Is pressed
 +
        return result
 +
</syntaxhighlight>
    
{{HACK-WIPY-TRAILER}}
 
{{HACK-WIPY-TRAILER}}
29 917

modifications

Menu de navigation