mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-01-03 14:38:30 -04:00
AP_Button: trigger low on invalid PWM input
This commit is contained in:
parent
b19bfba0ec
commit
d7ff10163c
@ -74,27 +74,27 @@ const AP_Param::GroupInfo AP_Button::var_info[] = {
|
||||
|
||||
// @Param: OPTIONS1
|
||||
// @DisplayName: Button Pin 1 Options
|
||||
// @Description: Options for Pin 1. PWM input detects PWM above or below 1800/1200us instead of logic level. Invert changes HIGH state to be logic low voltage on pin, or below 1200us, if PWM input.
|
||||
// @Description: Options for Pin 1. PWM input detects PWM above or below 1800/1200us instead of logic level. If PWM is not detected or is less than 800us or above 2200us the button will interpreted as low. Invert changes HIGH state to be logic low voltage on pin, or below 1200us, if PWM input.
|
||||
// @User: Standard
|
||||
// @Bitmask: 0:PWM Input,1:InvertInput
|
||||
AP_GROUPINFO("OPTIONS1", 6, AP_Button, options[0], 0),
|
||||
|
||||
// @Param: OPTIONS2
|
||||
// @DisplayName: Button Pin 2 Options
|
||||
// @Description: Options for Pin 2. PWM input detects PWM above or below 1800/1200us instead of logic level. Invert changes HIGH state to be logic low voltage on pin, or below 1200us, if PWM input.
|
||||
// @Description: Options for Pin 2. PWM input detects PWM above or below 1800/1200us instead of logic level. If PWM is not detected or is less than 800us or above 2200us the button will interpreted as low. Invert changes HIGH state to be logic low voltage on pin, or below 1200us, if PWM input.
|
||||
// @User: Standard
|
||||
// @Bitmask: 0:PWM Input,1:InvertInput
|
||||
AP_GROUPINFO("OPTIONS2", 7, AP_Button, options[1], 0),
|
||||
|
||||
// @Param: OPTIONS3
|
||||
// @DisplayName: Button Pin 3 Options
|
||||
// @Description: Options for Pin 3. PWM input detects PWM above or below 1800/1200us instead of logic level. Invert changes HIGH state to be logic low voltage on pin, or below 1200us, if PWM input.
|
||||
// @Description: Options for Pin 3. PWM input detects PWM above or below 1800/1200us instead of logic level. If PWM is not detected or is less than 800us or above 2200us the button will interpreted as low. Invert changes HIGH state to be logic low voltage on pin, or below 1200us, if PWM input.
|
||||
// @Bitmask: 0:PWM Input,1:InvertInput
|
||||
AP_GROUPINFO("OPTIONS3", 8, AP_Button, options[2], 0),
|
||||
|
||||
// @Param: OPTIONS4
|
||||
// @DisplayName: Button Pin 4 Options
|
||||
// @Description: Options for Pin 4. PWM input detects PWM above or below 1800/1200us instead of logic level. Invert changes HIGH state to be logic low voltage on pin, or below 1200us, if PWM input.
|
||||
// @Description: Options for Pin 4. PWM input detects PWM above or below 1800/1200us instead of logic level. If PWM is not detected or is less than 800us or above 2200us the button will interpreted as low. Invert changes HIGH state to be logic low voltage on pin, or below 1200us, if PWM input.
|
||||
// @User: Standard
|
||||
// @Bitmask: 0:PWM Input,1:InvertInput
|
||||
AP_GROUPINFO("OPTIONS4", 9, AP_Button, options[3], 0),
|
||||
@ -183,6 +183,13 @@ void AP_Button::update(void)
|
||||
continue;
|
||||
}
|
||||
const uint16_t pwm_us = pwm_pin_source[i].get_pwm_us();
|
||||
if (pwm_us < RC_Channel::RC_MIN_LIMIT_PWM || pwm_us > RC_Channel::RC_MAX_LIMIT_PWM) {
|
||||
// invalid pulse width, trigger low
|
||||
if (pwm_state & mask) {
|
||||
new_pwm_state &= ~mask;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
// these values are the same as used in RC_Channel:
|
||||
if (pwm_state & mask) {
|
||||
// currently asserted; check to see if we should de-assert
|
||||
|
Loading…
Reference in New Issue
Block a user