Différences entre versions de « MicroPython-Hack-deparasitage »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
Ligne 3 : Ligne 3 :
 
{{traduction}}
 
{{traduction}}
  
{{bloc-etroit|text=A pin used as input from a switch or other mechanical device can have a lot of noise on it, rapidly changing from low to high when the switch is first pressed or released. This noise can be eliminated using a capacitor (a debouncing circuit). It can also be eliminated using a simple function that makes sure the value on the pin is stable.
+
{{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.
  
The following function does just this. It gets the current value of the given pin, and then waits for the value to change. The new pin value must be stable for a continuous 20ms for it to register the change. You can adjust this time (to say 50ms) if you still have noise.
+
[[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):
     # wait for pin to change value
+
     # attendre que la broche change de valeur
    # it needs to be stable for a continuous 20ms
 
 
     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>
  
Use it something like this:
+
Vous pouvez l'utiliser comme ceci:
 
}}
 
}}
  

Version du 11 mai 2015 à 10:31


MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

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.

Switchbounce.jpg

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.