diff --git a/lib/SwitchableEncodeur/src/SwitchableEncodeur.cpp b/lib/SwitchableEncodeur/src/SwitchableEncodeur.cpp index 23d6709..2b0edd4 100644 --- a/lib/SwitchableEncodeur/src/SwitchableEncodeur.cpp +++ b/lib/SwitchableEncodeur/src/SwitchableEncodeur.cpp @@ -1,8 +1,13 @@ #include "../include/SwitchableEncodeur.h" IRAM_ATTR void switchEncoder() { - SwitchableEncodeur::getInstance()->addMenu(); - delay(200); + static unsigned long last_interrupt_time = 0; + unsigned long interrupt_time = millis(); + // If interrupts come faster than 200ms, assume it's a bounce and ignore + if (interrupt_time - last_interrupt_time > 200){ + SwitchableEncodeur::getInstance()->addMenu(); + } + last_interrupt_time = interrupt_time; } SwitchableEncodeur* SwitchableEncodeur::instance = nullptr; @@ -43,6 +48,9 @@ bool SwitchableEncodeur::update() { if (newPosition != this->oldPosition || this->menu != this->oldMenu) { this->oldMenu = this->menu; this->oldPosition = newPosition; + if(this->oldPosition < 0){ + this->oldPosition = 0; + } sortie = true; } return sortie;