Etabli
← Retour aux leçons
Leçon · FND-13 · Boutons fiables : l'anti-rebond · 2/4

Boutons fiables : l'anti-rebond

3 étapes·20 min·0/3 fait·quiz à réussir
voix

Tu sais maintenant CE qui s'affole : cinq à vingt fronts par appui, tassés dans quelques millisecondes. Voici le remède, et il tient en une phrase : à chaque changement accepté, note l'heure, puis fais la sourde oreille pendant vingt millisecondes. Trois lignes de code, zéro composant, un compteur qui dit enfin la vérité — pendant que le robot, lui, continue de rouler.

📖 Comprendre

1. Pourquoi vingt millisecondes, ni plus ni moins

La fenêtre doit d'abord être PLUS LONGUE que le pire rebond : les mesures de la leçon précédente donnent 1 à 10 ms selon les boutons — on retient 10, on double par sécurité : 20 ms. Une fenêtre de 5 ms, elle, laisserait passer les paresseux de 7 ou 8 ms, et les doubles comptages reviendraient sournoisement, seulement sur certains boutons, seulement certains jours : le pire des bugs, celui qui va et vient.

Elle doit ensuite être PLUS COURTE que le plus vif des doubles appuis humains : même un doigt de virtuose laisse au moins 50 ms entre deux vraies fermetures, et le commun des mortels en laisse plus de 100. À 20 ms, aucune pression humaine ne peut tomber dans la zone aveugle ; à 200 ms, on avalerait de vrais appuis rapides. La fenêtre de 20 ms est donc doublement à l'abri : au-dessus du pire de la mécanique, en dessous du meilleur de l'humain.

2. Noter l'instant, ignorer la suite

Le patron s'écrit en trois lignes de pseudo-code : « garde en l'état cru et l'instant de la dernière bascule acceptée ; à chaque tour de boucle, lis la ; si la lecture diffère de l'état cru ET que () moins l'instant noté atteint 20 ms, accepte : mets à jour l'état, note l'instant, signale le . Sinon, ignore : c'est un . » de temps, une variable d'état, et le compteur redevient honnête.

Deux finesses font la qualité du . D'une part, le relâchement rebondit aussi — la même fenêtre le couvre, puisqu'elle s'arme à CHAQUE bascule acceptée, dans les deux sens. D'autre part, la fenêtre ne retarde rien : le premier est cru immédiatement, et seuls ses sont muselés — comme la période réfractaire d'un neurone, qui tire d'abord et refuse ensuite de tirer à nouveau pendant un court répit.

20 ms : on ne croit plus rien1 naïf1 filtréle premier front compte, la rafale qui suit est avalée par la fenêtre

3. millis, jamais delay : le robot continue de rouler

La tentation classique : détecter le , puis (20), puis relire. Ça « marche » sur l'établi… et ça disqualifie le robot : pendant ces 20 ms, la boucle est morte — ignorés, livrés à eux-mêmes, appuis suivants perdus. Le chapitre de l'horloge l'a établi une fois pour toutes : la boucle ne dort JAMAIS. Un qui endort le cerveau soigne le symptôme en tuant le patient.

Avec , le ne coûte rien : à chaque tour, une soustraction — l'instant présent moins la dernière bascule — et une comparaison à 20. La boucle continue de tourner des dizaines de milliers de fois par seconde ; le clignotant clignote, le suiveur suit, les corrigent. L' est un simple locataire de la boucle, jamais son propriétaire — exactement comme le clignotant du chapitre de l'horloge.

delay(500)0 ms…il compte, il ne fait RIEN d'autrependant delay : le monde continue, le processeur non

🧮 Exemple guidé : la fenêtre déroulée à la milliseconde

Reprends la trace de la leçon précédente : fronts à 0, 2, 3, 5 et 7 ms à l'appui, puis relâchement à 250 ms avec ses propres rebonds à 252 et 256 ms. Déroule le filtre de 20 ms : quels fronts sont acceptés, que vaut le compteur d'appuis à la fin — et que serait-il arrivé à un vrai second appui ?

  1. 1.t = 0 ms : front descendant. Dernière bascule notée : il y a longtemps — écart largement ≥ 20 ms. ACCEPTÉ : le compteur passe à 1, on note l'instant 0.
  2. 2.t = 2, 3, 5 et 7 ms : quatre fronts. Écarts à l'instant noté : 2, 3, 5 et 7 ms — tous < 20. IGNORÉS, sans même relire deux fois : ce sont les rebonds de la fermeture.
  3. 3.t = 250 ms : front montant, le relâchement. 250 − 0 = 250 ms, largement ≥ 20. ACCEPTÉ : l'état cru repasse à haut, on note 250. Puis t = 252 et 256 ms : écarts de 2 et 6 ms — rebonds du relâchement, IGNORÉS.
  4. 4.Bilan : huit fronts vus à la broche, deux retenus, un appui compté. Et un vrai second appui, disons à 400 ms ? 400 − 250 = 150 ms ≥ 20 : accepté sans discussion — la fenêtre ne mange jamais un doigt humain.

Huit fronts à la broche, un seul appui au compteur : la fenêtre a tout avalé sauf la vérité. Et comme aucun humain ne referme un contact en moins de 20 ms, elle ne coûte rien à l'utilisateur : ni retard sur le premier front, ni appui perdu.

🛠 Pratiquer sur l'établi

  1. 01Compter les appuis naïvement : le compteur s'affole

    Rejoue d'abord le crime, pour tenir le témoin : compteur naïf, dix appuis lents, total faux et différent à chaque — note-le. Garde exactement ce montage en et ce sous la main : c'est lui qui prouvera la guérison quand tu n'auras changé QUE trois lignes.

    sur l'établi
    relâché0 frontsau repos : la ligne est parfaitement stable

Objectifs

  • +Voir les à l'
  • +Filtrer par logiciel (20 ms)
  • +Compter des appuis sans erreur
🧪 S'entraîner dans le bac à sable

Quiz de validation

À réussir pour valider la leçon

Réponds de mémoire, sans remonter la page : c'est l'effort de rappel qui grave le cours. Les trois bonnes réponses valident la leçon.

1. Pourquoi une fenêtre de 20 ms, plutôt que 5 ms ou 200 ms ?

2. Que fait l'anti-rebond logiciel à chaque changement d'état accepté ?

3. Pourquoi delay(20) est-il interdit pour ignorer les 20 ms, alors que le résultat semble le même ?

🧠 Ce qu'il faut retenir

  • 1.Un contact mécanique rebondit : un appui = une rafale d'ouvertures/fermetures.
  • 2.L' logiciel ignore les changements pendant ~20 ms après un .
  • 3.Sans , un menu saute des lignes et un compteur ment — toujours filtrer.