mirror of https://github.com/ArduPilot/ardupilot
Copter: add air mode aux function
This commit is contained in:
parent
1280eff6ef
commit
8d2f2443a2
|
@ -374,6 +374,8 @@ private:
|
|||
|
||||
ap_t ap;
|
||||
|
||||
AirMode air_mode; // air mode is 0 = not-configured ; 1 = disabled; 2 = enabled
|
||||
|
||||
static_assert(sizeof(uint32_t) == sizeof(ap), "ap_t must be uint32_t");
|
||||
|
||||
// This is the state of the flight control system
|
||||
|
|
|
@ -112,6 +112,7 @@ void RC_Channel_Copter::init_aux_function(const aux_func_t ch_option, const AuxS
|
|||
case AUX_FUNC::SUPERSIMPLE_MODE:
|
||||
case AUX_FUNC::SURFACE_TRACKING:
|
||||
case AUX_FUNC::WINCH_ENABLE:
|
||||
case AUX_FUNC::AIRMODE:
|
||||
do_aux_function(ch_option, ch_flag);
|
||||
break;
|
||||
default:
|
||||
|
@ -594,6 +595,19 @@ void RC_Channel_Copter::do_aux_function(const aux_func_t ch_option, const AuxSwi
|
|||
#endif
|
||||
break;
|
||||
|
||||
case AUX_FUNC::AIRMODE:
|
||||
switch (ch_flag) {
|
||||
case AuxSwitchPos::HIGH:
|
||||
copter.air_mode = AirMode::AIRMODE_ENABLED;
|
||||
break;
|
||||
case AuxSwitchPos::MIDDLE:
|
||||
break;
|
||||
case AuxSwitchPos::LOW:
|
||||
copter.air_mode = AirMode::AIRMODE_DISABLED;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
RC_Channel::do_aux_function(ch_option, ch_flag);
|
||||
break;
|
||||
|
|
|
@ -107,6 +107,13 @@ enum GuidedMode {
|
|||
Guided_Angle,
|
||||
};
|
||||
|
||||
// Airmode
|
||||
enum class AirMode {
|
||||
AIRMODE_NONE,
|
||||
AIRMODE_DISABLED,
|
||||
AIRMODE_ENABLED,
|
||||
};
|
||||
|
||||
// Safe RTL states
|
||||
enum SmartRTLState {
|
||||
SmartRTL_WaitForPathCleanup,
|
||||
|
|
|
@ -151,7 +151,7 @@ void Copter::update_throttle_mix()
|
|||
|
||||
if (flightmode->has_manual_throttle()) {
|
||||
// manual throttle
|
||||
if(channel_throttle->get_control_in() <= 0) {
|
||||
if (channel_throttle->get_control_in() <= 0 || air_mode == AirMode::AIRMODE_DISABLED) {
|
||||
attitude_control->set_throttle_mix_min();
|
||||
} else {
|
||||
attitude_control->set_throttle_mix_man();
|
||||
|
|
|
@ -180,7 +180,7 @@ void Copter::set_throttle_zero_flag(int16_t throttle_control)
|
|||
// and we are flying. Immediately set as non-zero
|
||||
if ((!ap.using_interlock && (throttle_control > 0) && !SRV_Channels::get_emergency_stop()) ||
|
||||
(ap.using_interlock && motors->get_interlock()) ||
|
||||
ap.armed_with_switch) {
|
||||
ap.armed_with_switch || air_mode == AirMode::AIRMODE_ENABLED) {
|
||||
last_nonzero_throttle_ms = tnow_ms;
|
||||
ap.throttle_zero = false;
|
||||
} else if (tnow_ms - last_nonzero_throttle_ms > THROTTLE_ZERO_DEBOUNCE_TIME_MS) {
|
||||
|
|
Loading…
Reference in New Issue