From 21f96ff494bc9eb65ca9366430b977773c1decc8 Mon Sep 17 00:00:00 2001 From: rueckix <39458989+rueckix@users.noreply.github.com> Date: Fri, 27 May 2022 21:40:12 +0200 Subject: [PATCH] progbutton fix --- src/knx_facade.cpp | 45 ++++++++++++++++++++++++++++----------------- src/knx_facade.h | 21 ++------------------- 2 files changed, 30 insertions(+), 36 deletions(-) diff --git a/src/knx_facade.cpp b/src/knx_facade.cpp index 5d48c7e..35a6a6b 100644 --- a/src/knx_facade.cpp +++ b/src/knx_facade.cpp @@ -15,35 +15,46 @@ #define ICACHE_RAM_ATTR #endif - ICACHE_RAM_ATTR void buttonUp() + #ifndef PROG_BTN_PRESS_MIN_MILLIS + #define PROG_BTN_PRESS_MIN_MILLIS 50 + #endif + + #ifndef PROG_BTN_PRESS_MAX_MILLIS + #define PROG_BTN_PRESS_MAX_MILLIS 500 + #endif + + + ICACHE_RAM_ATTR void buttonEvent() { - static uint32_t lastpressed=0; - if (millis() - lastpressed > 200){ + static uint32_t lastEvent=0; + uint32_t diff = millis() - lastEvent; + if (diff >= PROG_BTN_PRESS_MIN_MILLIS && diff <= PROG_BTN_PRESS_MAX_MILLIS){ knx.toggleProgMode(); - lastpressed = millis(); } + + lastEvent = millis(); } #endif #ifdef ARDUINO_ARCH_SAMD // predefined global instance for TP or RF or TP/RF coupler #if MASK_VERSION == 0x07B0 - KnxFacade knx(buttonUp); + KnxFacade knx(buttonEvent); #elif MASK_VERSION == 0x27B0 - KnxFacade knx(buttonUp); + KnxFacade knx(buttonEvent); #elif MASK_VERSION == 0x2920 - KnxFacade knx(buttonUp); + KnxFacade knx(buttonEvent); #else #error "Mask version not supported on ARDUINO_ARCH_SAMD" #endif #elif defined(ARDUINO_ARCH_RP2040) // predefined global instance for TP or RF or TP/RF coupler #if MASK_VERSION == 0x07B0 - KnxFacade knx(buttonUp); + KnxFacade knx(buttonEvent); #elif MASK_VERSION == 0x27B0 - KnxFacade knx(buttonUp); + KnxFacade knx(buttonEvent); #elif MASK_VERSION == 0x2920 - KnxFacade knx(buttonUp); + KnxFacade knx(buttonEvent); #else #error "Mask version not supported on ARDUINO_ARCH_RP2040" #endif @@ -51,11 +62,11 @@ #elif defined(ARDUINO_ARCH_ESP8266) // predefined global instance for TP or IP or TP/IP coupler #if MASK_VERSION == 0x07B0 - KnxFacade knx(buttonUp); + KnxFacade knx(buttonEvent); #elif MASK_VERSION == 0x57B0 - KnxFacade knx(buttonUp); + KnxFacade knx(buttonEvent); #elif MASK_VERSION == 0x091A - KnxFacade knx(buttonUp); + KnxFacade knx(buttonEvent); #else #error "Mask version not supported on ARDUINO_ARCH_ESP8266" #endif @@ -63,18 +74,18 @@ #elif defined(ARDUINO_ARCH_ESP32) // predefined global instance for TP or IP or TP/IP coupler #if MASK_VERSION == 0x07B0 - KnxFacade knx(buttonUp); + KnxFacade knx(buttonEvent); #elif MASK_VERSION == 0x57B0 - KnxFacade knx(buttonUp); + KnxFacade knx(buttonEvent); #elif MASK_VERSION == 0x091A - KnxFacade knx(buttonUp); + KnxFacade knx(buttonEvent); #else #error "Mask version not supported on ARDUINO_ARCH_ESP32" #endif #elif defined(ARDUINO_ARCH_STM32) #if MASK_VERSION == 0x07B0 - KnxFacade knx(buttonUp); + KnxFacade knx(buttonEvent); #else #error "Mask version not supported on ARDUINO_ARCH_STM32" #endif diff --git a/src/knx_facade.h b/src/knx_facade.h index 0b75248..7cc442c 100644 --- a/src/knx_facade.h +++ b/src/knx_facade.h @@ -177,24 +177,7 @@ template class KnxFacade : private SaveRestore _progLedOnCallback = progLedOnCallback; } - /** - * returns RISING if interrupt is created in a rising signal, FALLING otherwise - */ - uint32_t buttonPinInterruptOn() - { - return _buttonPinInterruptOn; - } - - /** - * Sets if the programming button creates a RISING or a FALLING signal. - * - * Set to RISING for GPIO--BUTTON--VDD or to FALLING for GPIO--BUTTON--GND - */ - void buttonPinInterruptOn(uint32_t value) - { - _buttonPinInterruptOn = value; - } - + uint32_t buttonPin() { return _buttonPin; @@ -423,7 +406,7 @@ template class KnxFacade : private SaveRestore ProgLedOffCallback _progLedOffCallback = 0; uint32_t _ledPinActiveOn = LOW; uint32_t _ledPin = LED_BUILTIN; - uint32_t _buttonPinInterruptOn = RISING; + uint32_t _buttonPinInterruptOn = CHANGE; uint32_t _buttonPin = 0; SaveCallback _saveCallback = 0; RestoreCallback _restoreCallback = 0;