|
|
|
@ -19,10 +19,6 @@
@@ -19,10 +19,6 @@
|
|
|
|
|
#endif |
|
|
|
|
#include "RC_Channel.h" |
|
|
|
|
|
|
|
|
|
#define RC_CHANNEL_ANGLE 0 |
|
|
|
|
#define RC_CHANNEL_RANGE 1 |
|
|
|
|
#define RC_CHANNEL_ANGLE_RAW 2 |
|
|
|
|
|
|
|
|
|
/// global array with pointers to all APM RC channels, will be used by AP_Mount and AP_Camera classes
|
|
|
|
|
/// It points to RC input channels, both APM1 and APM2 only have 8 input channels.
|
|
|
|
|
RC_Channel* rc_ch[NUM_CHANNELS]; |
|
|
|
@ -76,7 +72,7 @@ const AP_Param::GroupInfo RC_Channel::var_info[] PROGMEM = {
@@ -76,7 +72,7 @@ const AP_Param::GroupInfo RC_Channel::var_info[] PROGMEM = {
|
|
|
|
|
void |
|
|
|
|
RC_Channel::set_range(int16_t low, int16_t high) |
|
|
|
|
{ |
|
|
|
|
_type = RC_CHANNEL_RANGE; |
|
|
|
|
_type = RC_CHANNEL_TYPE_RANGE; |
|
|
|
|
_high = high; |
|
|
|
|
_low = low; |
|
|
|
|
_high_out = high; |
|
|
|
@ -93,7 +89,7 @@ RC_Channel::set_range_out(int16_t low, int16_t high)
@@ -93,7 +89,7 @@ RC_Channel::set_range_out(int16_t low, int16_t high)
|
|
|
|
|
void |
|
|
|
|
RC_Channel::set_angle(int16_t angle) |
|
|
|
|
{ |
|
|
|
|
_type = RC_CHANNEL_ANGLE; |
|
|
|
|
_type = RC_CHANNEL_TYPE_ANGLE; |
|
|
|
|
_high = angle; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -136,14 +132,14 @@ RC_Channel::set_pwm(int16_t pwm)
@@ -136,14 +132,14 @@ RC_Channel::set_pwm(int16_t pwm)
|
|
|
|
|
{ |
|
|
|
|
radio_in = pwm; |
|
|
|
|
|
|
|
|
|
if(_type == RC_CHANNEL_RANGE) { |
|
|
|
|
if(_type == RC_CHANNEL_TYPE_RANGE) { |
|
|
|
|
control_in = pwm_to_range(); |
|
|
|
|
//control_in = constrain(control_in, _low, _high);
|
|
|
|
|
//control_in = min(control_in, _high);
|
|
|
|
|
control_in = (control_in < _dead_zone) ? 0 : control_in; |
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
//RC_CHANNEL_ANGLE, RC_CHANNEL_ANGLE_RAW
|
|
|
|
|
//RC_CHANNEL_TYPE_ANGLE, RC_CHANNEL_TYPE_ANGLE_RAW
|
|
|
|
|
control_in = pwm_to_angle(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -165,15 +161,15 @@ RC_Channel::get_failsafe(void)
@@ -165,15 +161,15 @@ RC_Channel::get_failsafe(void)
|
|
|
|
|
void |
|
|
|
|
RC_Channel::calc_pwm(void) |
|
|
|
|
{ |
|
|
|
|
if(_type == RC_CHANNEL_RANGE) { |
|
|
|
|
if(_type == RC_CHANNEL_TYPE_RANGE) { |
|
|
|
|
pwm_out = range_to_pwm(); |
|
|
|
|
radio_out = (_reverse >= 0) ? (radio_min + pwm_out) : (radio_max - pwm_out); |
|
|
|
|
|
|
|
|
|
}else if(_type == RC_CHANNEL_ANGLE_RAW) { |
|
|
|
|
}else if(_type == RC_CHANNEL_TYPE_ANGLE_RAW) { |
|
|
|
|
pwm_out = (float)servo_out * .1; |
|
|
|
|
radio_out = (pwm_out * _reverse) + radio_trim; |
|
|
|
|
|
|
|
|
|
}else{ // RC_CHANNEL_ANGLE
|
|
|
|
|
}else{ // RC_CHANNEL_TYPE_ANGLE
|
|
|
|
|
pwm_out = angle_to_pwm(); |
|
|
|
|
radio_out = pwm_out + radio_trim; |
|
|
|
|
} |
|
|
|
|