Modifications

Sauter à la navigation Sauter à la recherche
2 691 octets supprimés ,  20 février 2016 à 16:23
Contenu remplacé par « {{MicroPython-Hack-Prepare-NAV}} {{MicroPython-Hack-deparasitage-core}} {{MicroPython-Hack-deparasitage-TRAILER}} »
Ligne 1 : Ligne 1 :  
{{MicroPython-Hack-Prepare-NAV}}
 
{{MicroPython-Hack-Prepare-NAV}}
   −
{{traduction}}
+
{{MicroPython-Hack-deparasitage-core}}
 
  −
{{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 ==
  −
{{bloc-etroit|text=C'est justement ce que fait la fonction ci-dessous. Elle prend la valeur actuelle de la broche puis attend que la valeur change et s'assure que la valeur reste stable pendant 20ms.
  −
 
  −
 
  −
Le code s'utilise avec le montage suivant.
  −
 
  −
[[Fichier:MicroPython-Hack-deboucing.jpg|480px]]
  −
 
  −
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
  −
 
  −
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)</nowiki>
  −
 
  −
Vous pouvez l'utiliser comme ceci:
  −
 
  −
<nowiki>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()</nowiki>
  −
 
  −
Au passage, vous noterez que la broches est configurée en '''PULL_DOWN''', ce qui signifie que le niveau reste à LOW/BAS aussi longtemps qu'une intervention extérieur ne place pas le potentiel de la broche au niveau HIGH/HAUT.
  −
 
  −
== A la méthode Arduino ==
  −
Si vous êtes bien attentif au point précédent, votre programme est arrêté aussi longtemps que l'utilisateur ne presse pas le bouton.
  −
 
  −
Si cela conviendra à certaines utilisation, ce ne sera pas le cas de la plupart des programmes qui cycles en vérifiant régulièrement l'état des boutons pour savoir ce que le programme doit faire.
  −
 
  −
Il y a toujours le [[MicroPython-Hack-button|concept de '''callback''' abordé dans ce tutoriel]] mais vous pouvez toujours utiliser [[Entr%C3%A9e_Bouton|une méthode largement utilisée sur les Arduino]].
  −
 
  −
Sur les Arduino, nous faisons du pooling dans le boucle principale. Les entrées sont lues, puis le soft attend 10ms et relis l'entrée. Si l'état est identique dans les deux cas, l'on considère cet état comme le nouvel état de l'entrée.
  −
 
  −
 
      
{{MicroPython-Hack-deparasitage-TRAILER}}
 
{{MicroPython-Hack-deparasitage-TRAILER}}
29 917

modifications

Menu de navigation