const int ledVerte = 4;
const int ledJaune = 3;
const int ledBleue = 2;
const int pinBPValidationReglage = 5;
const int pinSelecteurMode = 6;
#include <Bounce2.h>
Bounce BPValidationReglage = Bounce();
Bounce SelecteurMode = Bounce();
const int dureeAntiRebond = 30;
bool etatSelecteurMode;
unsigned long debutPressionBP = 0;
unsigned long finPressionBP = 0;
const unsigned long limitePressionCourteBP = 3000; // pression courte si - de 3 secondes
const unsigned long limitePressionLongueBP = 10000; // pression longue si + de 10 secondes
/* LES DRAPEAUX D'AFFICHAGE */
bool Z = 0; // flag affichage mode COMMANDE
bool Y = 0; // flag affichage mode REGLAGE
bool X = 0; // flag affichage butée droite (angle max)
bool W = 0; // flag affichage butée gauche (angle min))
bool V = 0; // flag desactivation interruptions D2 et D3 en mode REGLAGE
bool U = 0; // flag affichage suite mode REGLAGE
bool T = 0; // flag reglage valeur butées
bool R1; bool R2; // flag affichage direction en cours
/* ======================== */
// Les états possibles pour le bouton poussoir
enum EtatBP { EN_ATTENTE, APPUI_COURT, APPUI_MOYEN, APPUI_LONG };
EtatBP etatValidation = EN_ATTENTE;
void setup() {
Serial.begin(9600);
// Initialiser les LEDs en sortie
pinMode(ledVerte, OUTPUT);
pinMode(ledJaune, OUTPUT);
pinMode(ledBleue, OUTPUT);
pinMode(pinBPValidationReglage, INPUT_PULLUP);
pinMode(pinSelecteurMode, INPUT_PULLUP);
BPValidationReglage.attach(pinBPValidationReglage, INPUT_PULLUP);
BPValidationReglage.interval(dureeAntiRebond);
SelecteurMode.attach(pinSelecteurMode, INPUT_PULLUP);
SelecteurMode.interval(dureeAntiRebond);
etatSelecteurMode = digitalRead(pinSelecteurMode);
} // Fin de setup
void loop() {
BPValidationReglage.update();
SelecteurMode.update();
// Détecter si le bouton est appuyé
if (BPValidationReglage.fell()) {
debutPressionBP = millis(); // Mémoriser le temps d'appui
} // Fin de if (BPValidationReglage.fell())
// Détecter si le bouton est relâché
if (BPValidationReglage.rose()) {
finPressionBP = millis(); // Mémoriser le temps de relâchement
// Calculer la durée de l'appui
unsigned long dureeAppui = finPressionBP - debutPressionBP;
// Mettre à jour l'état en fonction de la durée d'appui
if (dureeAppui < limitePressionCourteBP) {
etatValidation = APPUI_COURT;
} else if (dureeAppui > limitePressionLongueBP) {
etatValidation = APPUI_LONG;
} else {
etatValidation = APPUI_MOYEN;
} // Fin de if (dureeAppui < limitePressionCourteBP)
// Allumer les LEDs en fonction de l'état actuel
switch (etatValidation) {
case EN_ATTENTE:
digitalWrite(ledVerte, LOW);
digitalWrite(ledJaune, LOW);
digitalWrite(ledBleue, LOW);
break;
case APPUI_COURT:
digitalWrite(ledVerte, HIGH);
digitalWrite(ledJaune, LOW);
digitalWrite(ledBleue, LOW);
break;
case APPUI_MOYEN:
digitalWrite(ledVerte, LOW);
digitalWrite(ledJaune, HIGH);
digitalWrite(ledBleue, LOW);
break;
case APPUI_LONG:
digitalWrite(ledVerte, LOW);
digitalWrite(ledJaune, LOW);
digitalWrite(ledBleue, HIGH);
break;
} // Fin de switch (etatValidation)
} // Fin de if (BPValidationReglage.rose())
} // Fin de loop