#include <OneButton.h> // inclure la bibliothèque OneButton
constexpr byte pinBP = 10; // pin du bouton (D10)
constexpr byte pinLedVerte = 9; // pin de la LED verte - correspondant au clique simple
constexpr byte pinLedRouge = 8; // pin de la LED rouge - correspondant au double clique
constexpr byte pinLedBleue = 7; // pin de la LED bleue - correspondant au clique long
OneButton bouton; // créer une instance (objet) bouton.
void simpleClick()
{
// dans cette fonction, donc le clique simple, c'est la LED verte qui fonctionne
static bool ledVerteAllumee = false; // on définit la variable état de la LED et sa valeur initiale (0 car false = faux)
ledVerteAllumee =! ledVerteAllumee; // on inverse l'état de la variable de l'état de la LED
digitalWrite(pinLedVerte, ledVerteAllumee ? HIGH : LOW);
// On éteint les autres LEDs
digitalWrite(pinLedRouge, LOW);
digitalWrite(pinLedBleue, LOW);
}
void doubleClick()
{
// dans cette fonction, donc le clique double, c'est la LED rouge qui fonctionne
static bool etatLedRouge = 0; // on définit la variable état de la LED
etatLedRouge =! etatLedRouge; // on inverse l'état de la variable de l'état de la LED
digitalWrite(pinLedRouge, etatLedRouge ? HIGH : LOW); // on rentre cette variable comme paramètre pour la LED
// On éteint les autres LEDs
digitalWrite(pinLedVerte, LOW);
digitalWrite(pinLedBleue, LOW);
}
void clickLong()
{
// dans cette fonction, donc le clique long, c'est la LED bleue qui fonctionne
static bool ledBleueAllumee = false; // on définit la variable état de la LED et sa valeur initiale
ledBleueAllumee =! ledBleueAllumee; // on inverse l'état de la variable de l'état de la LED
digitalWrite(pinLedBleue, ledBleueAllumee ? HIGH : LOW); // on utilise cette variable comme paramètre pour la LED
// On éteint les autres LEDs
digitalWrite(pinLedVerte, LOW);
digitalWrite(pinLedRouge, LOW);
}
void setup()
{
bouton.setup(pinBP, INPUT_PULLUP, true); // on paramètre le bouton avec sa pin, etc...
bouton.attachClick(simpleClick); // fonction appelée en cas de click
bouton.attachDoubleClick(doubleClick); // fonction appelée en cas de double click
bouton.attachLongPressStop(clickLong); // fonction appelée au moment ou le BP est relâché après un appui long
}
void loop()
{
bouton.tick(); // on lit en permanence le bouton connecté à la pin D10
}