mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-02-13 03:13:57 -04:00
ArduCopter: flight mode changes ignored while in throttle failsafe
reaction time to flight mode changes (when not in failsafe) reduced from 0.6 seconds to 0.1 seconds
This commit is contained in:
parent
cdfd3f9ccc
commit
258442770d
@ -51,7 +51,6 @@ static void set_failsafe(bool mode)
|
|||||||
|
|
||||||
// store the value so we don't trip the gate twice
|
// store the value so we don't trip the gate twice
|
||||||
// -----------------------------------------------
|
// -----------------------------------------------
|
||||||
//failsafe = mode;
|
|
||||||
ap.failsafe = mode;
|
ap.failsafe = mode;
|
||||||
|
|
||||||
if (ap.failsafe == false) {
|
if (ap.failsafe == false) {
|
||||||
|
@ -1037,10 +1037,6 @@ static void fast_loop()
|
|||||||
// ------------------------------
|
// ------------------------------
|
||||||
set_servos_4();
|
set_servos_4();
|
||||||
|
|
||||||
// Read radio
|
|
||||||
// ----------
|
|
||||||
read_radio();
|
|
||||||
|
|
||||||
// IMU DCM Algorithm
|
// IMU DCM Algorithm
|
||||||
// --------------------
|
// --------------------
|
||||||
read_AHRS();
|
read_AHRS();
|
||||||
@ -1061,6 +1057,11 @@ static void fast_loop()
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Read radio and 3-position switch on radio
|
||||||
|
// -----------------------------------------
|
||||||
|
read_radio();
|
||||||
|
read_control_switch();
|
||||||
|
|
||||||
// custom code/exceptions for flight modes
|
// custom code/exceptions for flight modes
|
||||||
// ---------------------------------------
|
// ---------------------------------------
|
||||||
update_yaw_mode();
|
update_yaw_mode();
|
||||||
@ -1299,10 +1300,6 @@ static void slow_loop()
|
|||||||
case 1:
|
case 1:
|
||||||
slow_loopCounter++;
|
slow_loopCounter++;
|
||||||
|
|
||||||
// Read 3-position switch on radio
|
|
||||||
// -------------------------------
|
|
||||||
read_control_switch();
|
|
||||||
|
|
||||||
#if MOUNT == ENABLED
|
#if MOUNT == ENABLED
|
||||||
update_aux_servo_function(&g.rc_5, &g.rc_6, &g.rc_7, &g.rc_8, &g.rc_10, &g.rc_11);
|
update_aux_servo_function(&g.rc_5, &g.rc_6, &g.rc_7, &g.rc_8, &g.rc_10, &g.rc_11);
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,28 +1,34 @@
|
|||||||
/// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
|
/// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
|
#define CONTROL_SWITCH_COUNTER 5 // 5 iterations (1/10th of a second) at a new switch position will cause flight mode change
|
||||||
static void read_control_switch()
|
static void read_control_switch()
|
||||||
{
|
{
|
||||||
static bool switch_debouncer = false;
|
static uint8_t switch_counter = 0;
|
||||||
|
|
||||||
byte switchPosition = readSwitch();
|
byte switchPosition = readSwitch();
|
||||||
|
|
||||||
if (oldSwitchPosition != switchPosition) {
|
if (oldSwitchPosition != switchPosition) {
|
||||||
if(switch_debouncer) {
|
switch_counter++;
|
||||||
|
if(switch_counter >= CONTROL_SWITCH_COUNTER) {
|
||||||
oldSwitchPosition = switchPosition;
|
oldSwitchPosition = switchPosition;
|
||||||
switch_debouncer = false;
|
switch_counter = 0;
|
||||||
|
|
||||||
|
// ignore flight mode changes if in failsafe
|
||||||
|
if( !ap.failsafe ) {
|
||||||
set_mode(flight_modes[switchPosition]);
|
set_mode(flight_modes[switchPosition]);
|
||||||
|
|
||||||
if(g.ch7_option != CH7_SIMPLE_MODE) {
|
if(g.ch7_option != CH7_SIMPLE_MODE) {
|
||||||
// set Simple mode using stored paramters from Mission planner
|
// set Simple mode using stored paramters from Mission planner
|
||||||
// rather than by the control switch
|
// rather than by the control switch
|
||||||
//ap.simple_mode = (g.simple_modes & (1 << switchPosition));
|
|
||||||
set_simple_mode(g.simple_modes & (1 << switchPosition));
|
set_simple_mode(g.simple_modes & (1 << switchPosition));
|
||||||
}
|
}
|
||||||
}else{
|
|
||||||
switch_debouncer = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}else{
|
||||||
|
// reset switch_counter if there's been no change
|
||||||
|
// we don't want 10 intermittant blips causing a flight mode change
|
||||||
|
switch_counter = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static byte readSwitch(void){
|
static byte readSwitch(void){
|
||||||
@ -31,8 +37,8 @@ static byte readSwitch(void){
|
|||||||
if (pulsewidth > 1230 && pulsewidth <= 1360) return 1;
|
if (pulsewidth > 1230 && pulsewidth <= 1360) return 1;
|
||||||
if (pulsewidth > 1360 && pulsewidth <= 1490) return 2;
|
if (pulsewidth > 1360 && pulsewidth <= 1490) return 2;
|
||||||
if (pulsewidth > 1490 && pulsewidth <= 1620) return 3;
|
if (pulsewidth > 1490 && pulsewidth <= 1620) return 3;
|
||||||
if (pulsewidth > 1620 && pulsewidth <= 1749) return 4; // Software Manual
|
if (pulsewidth > 1620 && pulsewidth <= 1749) return 4;
|
||||||
if (pulsewidth >= 1750) return 5; // Hardware Manual
|
if (pulsewidth >= 1750) return 5;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user