diff --git a/src/Button2.cpp b/src/Button2.cpp index ecef91e..ce73200 100755 --- a/src/Button2.cpp +++ b/src/Button2.cpp @@ -140,6 +140,16 @@ void Button2::setLongClickHandler(CallbackFunction f) { void Button2::setLongClickDetectedRetriggerable(bool retriggerable) { longclick_retriggerable = retriggerable; + has_longclick_retrigger_ms = false; + longclick_retrigger_ms = 0; +} + +///////////////////////////////////////////////////////////////// + +void Button2::setLongClickDetectedRetriggerable(bool retriggerable, unsigned int retrigger_ms) { + longclick_retriggerable = retriggerable; + has_longclick_retrigger_ms = true; + longclick_retrigger_ms = retrigger_ms; } ///////////////////////////////////////////////////////////////// @@ -398,7 +408,11 @@ void Button2::_checkForLongClick(long now) { if (longclick_reported) return; // has the longclick_ms period has been exceeded? - if (now - down_ms < (longclick_time_ms * (longclick_counter + 1))) return; + unsigned int threshold_ms = + has_longclick_retrigger_ms + ? longclick_time_ms + longclick_retrigger_ms * longclick_counter + : (longclick_time_ms * (longclick_counter + 1)); + if (now - down_ms < threshold_ms) return; // report multiple? if (!longclick_retriggerable) { diff --git a/src/Button2.h b/src/Button2.h index 2945693..7f4cc4c 100755 --- a/src/Button2.h +++ b/src/Button2.h @@ -61,12 +61,14 @@ class Button2 { unsigned long down_ms; bool longclick_retriggerable; + bool has_longclick_retrigger_ms = false; uint16_t longclick_counter = 0; bool longclick_detected = false; bool longclick_reported = false; unsigned int debounce_time_ms = BTN_DEBOUNCE_MS; unsigned int longclick_time_ms = BTN_LONGCLICK_MS; + unsigned int longclick_retrigger_ms = 0; unsigned int doubleclick_time_ms = BTN_DOUBLECLICK_MS; unsigned int down_time_ms = 0; @@ -135,6 +137,7 @@ class Button2 { void setLongClickDetectedHandler(CallbackFunction f); void setLongClickDetectedRetriggerable(bool retriggerable); + void setLongClickDetectedRetriggerable(bool retriggerable, unsigned int retrigger_ms); unsigned int wasPressedFor() const; bool isPressed() const;