Différences entre versions de « MicroPython-Hack-deparasitage »
Ligne 3 : | Ligne 3 : | ||
{{traduction}} | {{traduction}} | ||
− | {{bloc-etroit|text= | + | {{bloc-etroit|text=Une broche utilisée comme entrée pour lire un bouton poussoir ou un interrupteur mécanique peut recevoir beaucoup de parasites. En effet, durant un très court laps de temps, juste avant le contact franc, le signal peut rapidement passer de niveau haut à bas et inversement. |
− | + | [[Fichier:switchbounce.jpg|400px]] | |
+ | |||
+ | Ce "bruit" peut être éliminé en utilisant une capacité (un circuit de déparasitage... ''debouncing circuit'' en anglais). | ||
+ | |||
+ | Ce "bruit" peut également être éliminé en utilisant une simple fonction qui s'assure que la valeur de la broche est bien stable. | ||
+ | |||
+ | == Attendre que la valeur change == | ||
+ | C'est justement ce que fait la fonction suivante. Elle prend la valeur actuelle de la broche puis attend que la valeur change. | ||
+ | |||
+ | La nouvelle valeur doit être stable pendant un temps continu de 20ms puis enregistre le modification d'état. Vous pouvez ajuster le temps (par exemple, à 50ms) si le bruit est important. | ||
<nowiki>import pyb | <nowiki>import pyb | ||
def wait_pin_change(pin): | def wait_pin_change(pin): | ||
− | # | + | # attendre que la broche change de valeur |
− | |||
cur_value = pin.value() | cur_value = pin.value() | ||
+ | # Elle doit être stable pendant un temps continu de 20ms | ||
active = 0 | active = 0 | ||
while active < 20: | while active < 20: | ||
Ligne 21 : | Ligne 30 : | ||
pyb.delay(1)</nowiki> | pyb.delay(1)</nowiki> | ||
− | + | Vous pouvez l'utiliser comme ceci: | |
}} | }} | ||
Version du 11 mai 2015 à 10:31
Une broche utilisée comme entrée pour lire un bouton poussoir ou un interrupteur mécanique peut recevoir beaucoup de parasites. En effet, durant un très court laps de temps, juste avant le contact franc, le signal peut rapidement passer de niveau haut à bas et inversement.
Ce "bruit" peut être éliminé en utilisant une capacité (un circuit de déparasitage... debouncing circuit en anglais).
Ce "bruit" peut également être éliminé en utilisant une simple fonction qui s'assure que la valeur de la broche est bien stable.
Attendre que la valeur change
C'est justement ce que fait la fonction suivante. Elle prend la valeur actuelle de la broche puis attend que la valeur change.
La nouvelle valeur doit être stable pendant un temps continu de 20ms puis enregistre le modification d'état. Vous pouvez ajuster le temps (par exemple, à 50ms) si le bruit est important.
import pyb def wait_pin_change(pin): # attendre que la broche change de valeur cur_value = pin.value() # Elle doit être stable pendant un temps continu de 20ms active = 0 while active < 20: if pin.value() != cur_value: active += 1 else: active = 0 pyb.delay(1)
Vous pouvez l'utiliser comme ceci:
import pyb pin_x1 = pyb.Pin('X1', pyb.Pin.IN, pyb.Pin.PULL_DOWN) while True: wait_pin_change(pin_x1) pyb.LED(4).toggle()
Source: Debouncing a pin input écrit par/written by Damien P.George
Traduit par Meurisse D. pour MCHobby.be - Translated by Meurisse D. for MCHobby.be
Traduit avec l'autorisation de micropython.org - Translated with the authorisation of micropython.org
Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : « Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.
L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.