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}} |