Bonjour
Dans la série "petites librairies en français et simples d'usage à destination des débutants", voici la nouvelle version de ma librairie pour gérer facilement des boutons poussoirs.
Après téléchargement et installation, les exemples d'utilisation sont disponibles directement depuis l'IDE Arduino
Header :
//Librairie Arduino pour la gestion de boutons poussoirs
//Version 4.1
//
//Cablage : pin---BP---GND
//
//6 octets alloués en RAM pour un simpleBouton
//Les fonctions non utilisées sont dégagées à la compilation
//
//Bricoleau 2018
#ifndef simpleBouton_h
#define simpleBouton_h
#include <Arduino.h>
class simpleBouton
{
public :
//Constructeur
simpleBouton(uint8_t pin, uint8_t delai_debounce_ms = 20);
//Lecture hardware et mise à jour des variables internes
//Idéalement, doit être appelée à chaque début de loop()
bool actualiser(); //retourne true si l'état du bouton a changé
//Informations de statut
bool estEnfonce() const;
bool estRelache() const;
bool estStable() const;
uint8_t pin() const;
bool vientDEtreEnfonceOuRelache() const {return !estStable();}
bool vientDEtreEnfonce() const {return vientDEtreEnfonceOuRelache() && estEnfonce();}
bool vientDEtreRelache() const {return vientDEtreEnfonceOuRelache() && estRelache();}
//Informations de durée
uint32_t dureeEtatActuel() const {return millis() - this->_millis_etat_actuel;}
uint32_t dureeEnfonce() const {return estEnfonce() ? dureeEtatActuel() : 0;}
uint32_t dureeRelache() const {return estRelache() ? dureeEtatActuel() : 0;}
bool estStableDepuisAuMoins(uint32_t delai_ms) const {return dureeEtatActuel() >= delai_ms;}
bool estEnfonceDepuisAuMoins(uint32_t delai_ms) const {return estStableDepuisAuMoins(delai_ms) && estEnfonce();}
bool estRelacheDepuisAuMoins(uint32_t delai_ms) const {return estStableDepuisAuMoins(delai_ms) && estRelache();}
bool estStableDepuisPlusDe(uint32_t delai_ms) const {return dureeEtatActuel() > delai_ms;}
bool estEnfonceDepuisPlusDe(uint32_t delai_ms) const {return estStableDepuisPlusDe(delai_ms) && estEnfonce();}
bool estRelacheDepuisPlusDe(uint32_t delai_ms) const {return estStableDepuisPlusDe(delai_ms) && estRelache();}
uint8_t delaiDebounceMs() const {return this->_delai_debounce_ms;}
//Et pour un usage minimaliste :
operator bool() {return actualiser() && estEnfonce();}
private :
uint8_t _statut, _delai_debounce_ms;
uint32_t _millis_etat_actuel;
};
class boutonAction
{
public :
boutonAction(uint8_t pin, uint8_t delai_debounce_ms = 20);
void attacher(void (*clic)(), void (*clicClic)() = NULL, void (*clicClicClic)() = NULL);
static uint16_t delai_max_interclic_ms;
void activerRepetition(uint32_t (*delaiRepetitionPersonnalise)(uint32_t) = NULL);
void desactiverRepetition();
void actualiser();
private :
simpleBouton bouton;
void (*_simpleClic)();
void (*_doubleClic)();
void (*_tripleClic)();
uint8_t _statut;
uint32_t _millis_dernier_clic, _millis_derniere_action;
uint32_t (*_delaiRepetition)(uint32_t);
//Prendre exemple sur la fonction ci-dessous dans le cpp pour définir une fonction personnalisée
static uint32_t _delaiRepetitionParDefaut(uint32_t duree_enfonce);
};
#endif
V3 du 16/03/2018
Pour les cas d'utilisation les plus simples, vous pouvez à présent utiliser le bouton comme un simple booléen !
Impossible de faire plus facile à utiliser
Par exemple :
#include "simpleBouton.h"
simpleBouton boutonTest(7);
void setup() {
Serial.begin(9600);
}
void loop() {
if (boutonTest) Serial.println("Detection appui bouton");
}
V4 du 03/11/2018
Ajout d'une classe boutonAction, qui permet d'associer une fonction à exécuter au clic sur un bouton.
Cette classe permet aussi de gérer le double ou le triple clic avec une fonction associée à chacun.
Le délai maximum entre deux clics est par défaut à 500 ms.
La répétition est activable sur un appui long (comme une touche d'un clavier d'ordi).
Par défaut, la cadence de répétition est progressive, mais il est possible de faire prendre en compte une fonction de cadencement personnalisée.
Et bien sûr, la répétition fonctionne aussi avec les clics multiples
Les exemples 11 à 15 illustrent les nouvelles possibilités.
Je recommande particulièrement l'exemple 14 : réglage d'une valeur via un seul bouton.
V4.1 du 16/11/2018
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 :
const uint8_t pin_bouton = 3;//cablage pin---BP---GND
doit être modifié en
const uint8_t pin_bouton = D3;//cablage pin---BP---GND
V4.2 du 07/08/2020
Suppression du warning parasite lors de la compilation
simpleBouton.zip (15.8 KB)