You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
1.1 KiB
38 lines
1.1 KiB
#include "Copter.h" |
|
|
|
#if LANDING_GEAR_ENABLED == ENABLED |
|
|
|
// Run landing gear controller at 10Hz |
|
void Copter::landinggear_update() |
|
{ |
|
// exit immediately if no landing gear output has been enabled |
|
if (!SRV_Channels::function_assigned(SRV_Channel::k_landing_gear_control)) { |
|
return; |
|
} |
|
|
|
// support height based triggering using rangefinder or altitude above ground |
|
int32_t height_cm = flightmode->get_alt_above_ground_cm(); |
|
|
|
// use rangefinder if available |
|
switch (rangefinder.status_orient(ROTATION_PITCH_270)) { |
|
case RangeFinder::Status::NotConnected: |
|
case RangeFinder::Status::NoData: |
|
// use altitude above home for non-functioning rangefinder |
|
break; |
|
|
|
case RangeFinder::Status::OutOfRangeLow: |
|
// altitude is close to zero (gear should deploy) |
|
height_cm = 0; |
|
break; |
|
|
|
case RangeFinder::Status::OutOfRangeHigh: |
|
case RangeFinder::Status::Good: |
|
// use last good reading |
|
height_cm = rangefinder_state.alt_cm_filt.get(); |
|
break; |
|
} |
|
|
|
landinggear.update(height_cm * 0.01f); // convert cm->m for update call |
|
} |
|
|
|
#endif // LANDING_GEAR_ENABLED
|
|
|