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

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
Ligne 50 : Ligne 50 :
 
     state = p_in.value()
 
     state = p_in.value()
 
     if state!=last_state:
 
     if state!=last_state:
         if state != 0:
+
         if state == 0:
 
             counter += 1
 
             counter += 1
 
         last_state = state
 
         last_state = state
Ligne 61 : Ligne 61 :
  
 
Voici quelques explications:
 
Voici quelques explications:
* '''Ligne 1''': importer l
+
* '''Lignes 3 et 4''': {{fname|counter}} est incrémenté à chaque pression du bouton. {{fname|last_counter}} contient la dernière valeur connue du compteur (celle qui a été affichée dans REPL pour la dernière fois).
 +
* '''ligne 6''': déclaration de {{fname|p_in}}, broche en entrée avec résistance pull-up. Quand le bouton est pressé, le signal passe au niveau bas. Quand il est relâché, il passe au niveau haut.
  
 
== Un problème? ==
 
== Un problème? ==

Version du 1 février 2025 à 00:25

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 counter = 0
 4 last_counter = 0
 5 
 6 p_in = Pin( 10, Pin.IN, Pin.PULL_UP )
 7 last_state = p_in.value()
 8 while True:
 9     state = p_in.value()
10     if state!=last_state:
11         if state == 0:
12             counter += 1
13         last_state = state
14         continue
15     
16     if counter != last_counter:
17         print( counter )
18         last_counter = counter

Voici quelques explications:

  • Lignes 3 et 4: counter est incrémenté à chaque pression du bouton. last_counter contient la dernière valeur connue du compteur (celle qui a été affichée dans REPL pour la dernière fois).
  • ligne 6: déclaration de p_in, broche en entrée avec résistance pull-up. Quand le bouton est pressé, le signal passe au niveau bas. Quand il est relâché, il passe au niveau haut.

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.