User Tools

Site Tools


in202:seance_7:jalon_2

Jalon 2: Détecter les appuis courts, moyens et longs sur le bouton

Retour à la séance 7

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.

Phase 1

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.

Etape 1

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.

Etape 2

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.

Etape 3

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";
}

Navigation

in202/seance_7/jalon_2.txt · Last modified: 2022/11/18 10:45 (external edit)