Table of Contents

Jalon 5 : Implanter de nouvelles fonctions

Retour à la séance 6

Question n° 1: Gérer les rebonds

Il se peut que quand vous relâchez le bouton, vous réappuyez de manière transitoire, ce qui peut déclencher un flux supplémentaire. Dans ce cas, l'idée est de définir un temps minimal entre deux appuis du bouton, pour ne pas prendre en compte un tel rebond.

Pour ce faire, vous pouvez modifier le EventHandler en vous assurant que ce temps minimal c'est bien déroulé entre deux événnements de type Pressed, Released et Changed. Pour déterminer le temps qui s'est écoulé, il suffit de stocker dans un champ, par exemple int m_lastPressedTime le temps auquel s'est déroulé le dernier événement pris en compte. La fonction ''millis()'' retourne le nombre de millisecondes qui se sont écoulés depuis le démarrage de la carte.

Modifier la classe ButtonEvents pour prendre en compte ce mécanisme de contrôle de rebond.

Indication : dans template<int First, int… _Rest> class ButtonEvents<First, _Rest>, en complément de static Button* mButton, il faut ajouter les champs static int mLastPressedTime, static int mLastReleasedTime, static int mLastChangedTime. Ensuite, il faut modifier les fonction Pressed, Released et Changed pour n'appeller que quand le temps écoulé depuis le dernier événements pris en compte est supérieur à un certain délai, 200 ms semble être un bon critère entre deux appuis sur le bouton.

Question n° 2: Augmenter les fonctions de votre LED

Nous pouvons imaginer un fonctionnement plus complexe que celui actuel, où la carte ARDUNINO fonctionne comme un télérupteur. Vous appuyez une fois, cela allume la diode interne, une deuxième fois, cela l'éteint. Nous pouvons imaginer un cylce plus complexe :

Modifier votre classe pour implanter un tel comportement.

Navigation

Précédent: Jalon 4: Ajouter à la classe Button la réactivité