[Partage] Boutons Poussoirs

Salut @bricoleau

j'ai acquis il y quelques temps tout un lot de boutons momentanés avec LED intégrée


que je souhaitais utiliser dans le cadre de travaux pratiques de découverte, soit en simple bouton momentané, soit avec allumage de la LED, soit avec association d'un son par le biais d'un Piezo.

piezo.png

Comme je voulais simplifier initialement la gestion de ces boutons, je me suis dit que partir de votre librairie ne pouvait pas faire de mal - mais plutôt que de gérer la LED ou le PIEZO lors des actions, je me suis dit qu'il serait sympa d'intégrer ces boutons particuliers à votre librairie en tant que sous classe.

J'ai donc modifié un tout petit peu la classe simpleBouton pour modifier la déclaration de

bool actualiser(); //retourne true si l'état du bouton a changé

en

virtual bool actualiser(); //retourne true si l'état du bouton a changé

de façon à pouvoir gérer correctement l'héritage

J'en ai aussi profité pour modifier une ligne dans le .cpp qui donne un warning avec la dernière version de l'IDE

const uint8_t masque_pin_simpleBouton = (uint8_t) ~(masque_etat_simpleBouton | masque_chgt_simpleBouton);

en rajoutant le cast en (uint8_t) parce que (masque_etat_simpleBouton | masque_chgt_simpleBouton) ou le résultat du complément à 1 est automatiquement promu en int (sur 2 octets).

J'ai donc créé deux nouvelles classes ledBouton et ledPiezoBouton qui héritent de simpleBouton

class ledBouton : public simpleBouton
class ledPiezoBouton : public ledBouton

Les constructeurs sont simples, pour le ledBouton on prend un paramètre en plus qui dit quelle est la pin associée à la LED et pour le ledPiezoBouton il y a encore une pin de plus qui dit quelle est la pin associée à son piezo.

Je voulais aussi pouvoir prendre l'approche "machine à état" et utiliser des callbacks, mais j'ai eu un peu la flemme de partir sur ce que vous aviez fait avec la classe boutonAction alors j'en propose une toute nouvelle boutonRetroAction qui reprend globalement l'intégralité de votre travail, sauf que cette classe attend en entrée de son constructeur un pointeur sur un simpleBouton (ou sous classe) déjà instancié. J'ai aussi profité de la modification pour changer la signature des clicks (simple, double, triple) pour passer en paramètre l'instance du bouton qui déclenche le callback. ça permet ainsi d'avoir la même fonction associée à plusieurs boutons et de différencier au sein de la fonction qui est le bouton appelant. Je trouve que ça donne comme cela plus de flexibilité.

Je mets un code de test + les 2 fichiers principaux de la nouvelle version en PJ dans le zip (trop gros pour poster directement) qui va avec ce petit montage

Le bouton vert (pin3) se comporte en simple bouton
Le bouton orange (pin 5) en bouton avec LED (pin 4)
Le bouton bleu (pin 7) déclenche en plus de la LED (pin 6) un son sur le piezo (pin 12).

à noter un truc qui n'est pas trop conventionnel si vous achetez ce genre de boutons:

  • d'une part sur certains sites ils sont notés 12v, ce n'est pas vrai du tout... ne dépassez pas les valeurs habituelles pour des LEDs, (3.3V ou 5V et utilisez une résistance de limitation de courant entre 200Ω et 300Ω)
  • Pour savoir où est l'Anode et la cathode sur le bouton, ils ont mis un point rouge d'un côté... on associe souvent le rouge au pôle positif dans les montages, ben... ici c'est le contraire, le point rouge dénote la cathode de la LED (donc vous reliez cette partie à la masse).
    TactilePushButtonLed.png

Le code de démo comprend en plus un #define, suivant que vous l'activez ou pas vous allez utiliser la version "de base" ou la version avec les callbacks.

ledBoutonTest.zip (5.93 KB)