AP_ICEngine: add debounce to RC input for ICE_START_CHAN

This commit is contained in:
Andrew Tridgell 2020-08-12 11:31:58 +10:00
parent 5c22e9e105
commit 23da0ea8b6
2 changed files with 30 additions and 2 deletions

View File

@ -23,6 +23,8 @@
extern const AP_HAL::HAL& hal;
#define AP_ICENGINE_START_CHAN_DEBOUNCE_MS 300
const AP_Param::GroupInfo AP_ICEngine::var_info[] = {
// @Param: ENABLE
@ -163,14 +165,36 @@ void AP_ICEngine::update(void)
if (c != nullptr) {
// get starter control channel
cvalue = c->get_radio_in();
// snap the input to either 1000, 1500, or 2000
// this is useful to compare a debounce changed value
// while ignoring tiny noise
if (cvalue >= 1700) {
cvalue = 2000;
} else if (cvalue <= 1300) {
cvalue = 1300;
} else {
cvalue = 1500;
}
}
bool should_run = false;
uint32_t now = AP_HAL::millis();
if (state == ICE_OFF && cvalue >= 1700) {
// debounce timer to protect from spurious changes on start_chan rc input
// If the cached value is the same, reset timer
if (start_chan_last_value == cvalue) {
start_chan_last_ms = now;
} else if (now - start_chan_last_ms >= AP_ICENGINE_START_CHAN_DEBOUNCE_MS) {
// if it has changed, and stayed changed for the duration, then use that new value
start_chan_last_value = cvalue;
}
if (state == ICE_OFF && start_chan_last_value >= 1700) {
should_run = true;
} else if (cvalue <= 1300) {
} else if (start_chan_last_value <= 1300) {
should_run = false;
} else if (state != ICE_OFF) {
should_run = true;

View File

@ -121,6 +121,10 @@ private:
DISABLE_IGNITION_RC_FAILSAFE=(1U<<0),
};
AP_Int16 options;
// start_chan debounce
uint16_t start_chan_last_value;
uint32_t start_chan_last_ms;
};