Vous ajouterez à votre projet (ou vous dupliquez votre projet et vous ajoutez) le nouveau fichier correspondant à une classe Button
un peu différente de la semaine dernière. La raison est que nous devons utiliser un bouton sans avoir de résistances. Nous utilisons donc un modèle différent qui fonctionne par cour-circuit
mais qui occassionne beaucoup de bruit électronique, donc qui est un peu plus compliquer à mettre en oeuvre.
Ajouter le bouton entre qui sera connecté à d'un coté un port entre 2 et 7 et de l'autre côté à la terre. Vous devriez avec un schéma de connexion de ce type :
+----- bouton -----+----- diode -----+ | | | pin bouton terre pin diode
Le port pin bouton
est configuré pour ête à 3.3V
par défaut, quand on appuie sur le bouton, on met le circuit en court-circuit (il est protégé par une résistance) et la tension mesurée tombe à 0V
. Cependant, il y a pas mal de parasite, c'est pour cela qu'il faut un code plus compliqué que celui de la classe Button
de la semaine dernière pour éliminer les parasites. (Parfois une résistance bien placée simplifie la vie!).
La classe Button
implante nativement la gestion des évènements. Chaque fois que le bouton est appuyé, il déclenche une interruption FALLING
(et oui, nous passons de 3.3V à 0V quand nous appuyons sur le bouton) puis une interruption RISING
(pour détecter quand nous relachons le bouton pour passer de 0V à 3.3V).
Chaque fois qu'une interruption FALLING
valide se produit (ie. le bouton est enfoncé), la méthode virtuelle OnButtonPressed(uint32_t theEventTime)
. La variable theEventTime
indique le moment où l'on a appuyé sur le bouton (c'est le nombre de millisecondes qui se sont écoulés depuis le démarrage de la carte). De même quand l'interruption RISING
se produit après une interruption FALLING
valide, la méthode virtuelle OnButtonReleased(uint32_t theEventTime)
est appelée. La variable theEventTime
indique le moment où l'on a relâche le bouton.
Connecter le bouton comme décrit précédemment et créer un petit programme qui teste si les méthodes OnButtonPressed
et OnButtonReleased
sont bien appelées.
Nous souhaitons détecter des appuis courts (on appuie sur le bouton moins de 600 ms, long (moins de 1,5) et très long (plus de 1,5s).
Nous souhaiterons que losqu'un tel appui est détecté, les méthodes virtuelles suivantes que nous ajoutons à la classe soient appellées :
virtual void OnShortButtonClick();
virtual void OnLongButtonClick();
virtual void OnVeryLongButtonClick();
Proposer une modification des fonctions OnButtonPressed()
et OnButtonReleased()
afin de calculer la durée de l'appui et en fonction de cette durée d'appeller l'une des méthodes précédentes.
Ajouter aux fonctions :
virtual void OnShortButtonClick();
virtual void OnLongButtonClick();
virtual void OnVeryLongButtonClick();
un code du type
virtual void OnShortButtonClick() { if(IsDebug()) Serial << name() << ": " << "short click\n"; }
Précédent: Jalon 1: La classe DimmableLed
Suivant: Jalon 3: Commande de la Led dimmable à partir du bouton