Go Down

Topic: [Partage] Boutons Poussoirs (Read 7613 times) previous topic - next topic

bricoleau

Tutoriels arduino : http://forum.arduino.cc/index.php?topic=398112.0

J-M-L

Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

bricoleau

V4.1 du 16/11/2016

Compatibilité ESP8266 (testé sur wemos)

Attention : les exemples fournis sont basés sur les numéros de pin d'une arduino uno, à modifier pour fonctionner sur un wemos. Par exemple :
Code: [Select]
const uint8_t pin_bouton = 3;//cablage pin---BP---GND
 doit être modifié en
Code: [Select]
const uint8_t pin_bouton = D3;//cablage pin---BP---GND

Retourner en début de topic pour accéder au téléchargement
Tutoriels arduino : http://forum.arduino.cc/index.php?topic=398112.0

buldo


J-M-L

J'avais noté de signaler cela:

Petite modification nécessaire ligne 15 --> rajoutez un cast sinon l'opération ~ va générer un int et on aura un warning à la compilation

Code: [Select]
const uint8_t masque_pin_simpleBouton = (uint8_t) ~(masque_etat_simpleBouton | masque_chgt_simpleBouton);
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

J-M-L

#35
Jan 06, 2019, 03:20 pm Last Edit: Jan 06, 2019, 03:42 pm by J-M-L
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.



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
Code: [Select]
bool actualiser(); //retourne true si l'état du bouton a changé
 en
Code: [Select]
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
Code: [Select]
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
Code: [Select]
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).



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.
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Go Up