#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
}