Différences entre versions de « P2E-Input-DEBOUNCE-FR »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
Ligne 40 : Ligne 40 :
  
 
<syntaxhighlight lang="python" line highlight="3,7">
 
<syntaxhighlight lang="python" line highlight="3,7">
xxx
+
from machine import Pin
 +
 
 +
last_counter = 0
 +
counter = 0
 +
 
 +
p_in = Pin( 10, Pin.IN, Pin.PULL_UP )
 +
last_state = p_in.value()
 +
while True:
 +
    # lecture de l'état
 +
    state = p_in.value()
 +
    if state!=last_state:
 +
        # raising edge
 +
        if state != 0:
 +
            counter += 1
 +
        last_state = state
 +
        continue
 +
   
 +
    if counter != last_counter:
 +
        print( counter )
 +
        last_counter = counter
 
</syntaxhighlight>
 
</syntaxhighlight>
  

Version du 1 février 2025 à 00:09

Introduction

Dans le tutoriel sur les entrées numériques nous avons vu comment détecter la pression d'un bouton.

Ce que ce tutoriel ne nous à pas enseigné, c'est qu'un bouton ne dispose pas de contacts parfait!

Le contact n'est donc pas instantané et présente une série de "rebonds" comme l'indique la capture ci-dessous.

Switchbounce.jpg

Cet période transitoire dure, tout au plus, 10 millisecondes! Cependant, étant donné la rapidité des microcontrôleurs actuels, 10 millisecondes représente une réelle éternité.

Ainsi, un microcontrôleur sera capable, durant cette période transitoire, de détecter plusieurs pressions sur le bouton.

Ce comportement peu avoir des impacts négatifs sur un projet:

  • démarrage/arrêt par à-coups, ce qui peut être néfaste aussi bien électriquement que mécaniquement.
  • incrémenter/décrémenter un compteur de consigne de plusieurs unités en une seule pression.
  • créer des comportements intempestifs et inattendus dans le logiciel.

Ce tutoriel démontrera l'impact des rebonds sur un compteur puis présentera une solution de déparasitage logiciel.

Cas pratique

L'exemple ci-dessous utilise le bouton Btn 1 pour incrémenter un compteur et en afficher la valeur dans la session REPL à l'aide de la fonction print().

Branchement simplifié

Réaliser le branchement entre GP10 et le contact Btn1.
La carte prend en charge les autres détails du raccordement.

Le bouton permet de raccorder la broche sur la masse lorsque celui-ci est pressé.

P2E-digital-input.png

Code sans déparasitage

Le code ci-dessous peut être saisi dans une session REPL ou dans Thonny IDE.

En pressant le bouton, on pourra remarquer que, de temps à autre, le bouton incrémente plusieurs fois le compteur.

Cet exemple est également disponible dans le dépôt sous le nom nodebounce.py .

 1 from machine import Pin
 2 
 3 last_counter = 0
 4 counter = 0
 5 
 6 p_in = Pin( 10, Pin.IN, Pin.PULL_UP )
 7 last_state = p_in.value()
 8 while True:
 9     # lecture de l'état
10     state = p_in.value()
11     if state!=last_state:
12         # raising edge
13         if state != 0:
14             counter += 1
15         last_state = state
16         continue
17     
18     if counter != last_counter:
19         print( counter )
20         last_counter = counter

Voici quelques explications:

  • Ligne 1: importer l

Un problème?

Pas de message PRESS affiché lorsque vous pressez le bouton ? Voici quelques pistes de recherche:

  1. Avez-vou


Le défi

Branchez la LEDs Rouge sur GP2 et le Bouton Btn1 sur GP10.

Allumer la LED lors le bouton est enfoncé, éteindre la LED lorsque le bouton est relâché.


Traduction augmentée réalisée par Meurisse. D pour shop.MCHobby.be - Licence CC-BY-SA.


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.