Modifications

Sauter à la navigation Sauter à la recherche
1 205 octets ajoutés ,  13 juin 2016 à 16:12
Ligne 263 : Ligne 263 :  
</syntaxhighlight>
 
</syntaxhighlight>
   −
ce qui produit le résultat suivant après '''exactement''' 5 pression physique du bouton... les rebonds de contact ne viennent plus nous importuner.  
+
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
 
  <nowiki>presser le bouton svp
Ligne 275 : Ligne 275 :  
presser le bouton svp
 
presser le bouton svp
 
counter = 5</nowiki>
 
counter = 5</nowiki>
 +
 +
==== Classe PullUpButton ====
 +
Pour les plus curieux, voici l'implémentation de la classe PullUpButton. Voux 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