From f465a9336e5ec60575de2524cb44177b819cf24c Mon Sep 17 00:00:00 2001 From: Peter Barker Date: Fri, 13 Aug 2021 15:48:43 +1000 Subject: [PATCH] AP_Button: add debounce on PWM input Co-authored-by: jmachuca77 --- libraries/AP_Button/AP_Button.cpp | 13 +++++++++++-- libraries/AP_Button/AP_Button.h | 2 ++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/libraries/AP_Button/AP_Button.cpp b/libraries/AP_Button/AP_Button.cpp index b6fd87483d..b1a305a8c5 100644 --- a/libraries/AP_Button/AP_Button.cpp +++ b/libraries/AP_Button/AP_Button.cpp @@ -201,9 +201,18 @@ void AP_Button::update(void) } } } + const uint64_t now_ms = AP_HAL::millis64(); if (new_pwm_state != pwm_state) { - pwm_state = new_pwm_state; - last_debounce_ms = AP_HAL::millis64(); + if (new_pwm_state != tentative_pwm_state) { + tentative_pwm_state = new_pwm_state; + pwm_start_debounce_ms = now_ms; + } else if (now_ms - pwm_start_debounce_ms > DEBOUNCE_MS) { + pwm_state = new_pwm_state; + last_debounce_ms = now_ms; + } + } else { + tentative_pwm_state = pwm_state; + pwm_start_debounce_ms = now_ms; } if (last_debounce_ms != 0 && diff --git a/libraries/AP_Button/AP_Button.h b/libraries/AP_Button/AP_Button.h index 76cefab83f..dff1a1a720 100644 --- a/libraries/AP_Button/AP_Button.h +++ b/libraries/AP_Button/AP_Button.h @@ -76,6 +76,8 @@ private: // current state of PWM pins: uint8_t pwm_state; + uint8_t tentative_pwm_state; // for debouncing + uint64_t pwm_start_debounce_ms; // mask indicating which action was most recent taken for pins uint8_t state_actioned_mask;