Browse Source

Add reversing for PWM outputs in angle_to_pwm case.

git-svn-id: https://arducopter.googlecode.com/svn/trunk@1566 f9c3cf11-9bcb-44bc-f272-b75c42450872
mission-4.1.18
deweibel@gmail.com 14 years ago
parent
commit
3443a7817d
  1. 23
      libraries/RC_Channel/RC_Channel.cpp
  2. 1
      libraries/RC_Channel/RC_Channel.h

23
libraries/RC_Channel/RC_Channel.cpp

@ -40,6 +40,13 @@ RC_Channel::set_reverse(bool reverse) @@ -40,6 +40,13 @@ RC_Channel::set_reverse(bool reverse)
else _reverse = 1;
}
bool
RC_Channel::get_reverse(void)
{
if (_reverse==-1) return 1;
else return 0;
}
void
RC_Channel::set_filter(bool filter)
{
@ -179,10 +186,18 @@ RC_Channel::pwm_to_angle() @@ -179,10 +186,18 @@ RC_Channel::pwm_to_angle()
int16_t
RC_Channel::angle_to_pwm()
{
if(servo_out < 0)
return ((long)servo_out * (long)(radio_max - radio_trim)) / (long)_high;
else
return ((long)servo_out * (long)(radio_trim - radio_min)) / (long)_high;
if(_reverse == -1)
{
if(servo_out < 0)
return ( -1 * ((long)servo_out * (long)(radio_max - radio_trim)) / (long)_high);
else
return ( -1 * ((long)servo_out * (long)(radio_trim - radio_min)) / (long)_high);
} else {
if(servo_out > 0)
return ((long)servo_out * (long)(radio_max - radio_trim)) / (long)_high;
else
return ((long)servo_out * (long)(radio_trim - radio_min)) / (long)_high;
}
//return (((float)servo_out / (float)_high) * (float)(radio_max - radio_trim));
//return (((float)servo_out / (float)_high) * (float)(radio_trim - radio_min));

1
libraries/RC_Channel/RC_Channel.h

@ -52,6 +52,7 @@ class RC_Channel{ @@ -52,6 +52,7 @@ class RC_Channel{
void set_range(int low, int high);
void set_angle(int angle);
void set_reverse(bool reverse);
bool get_reverse(void);
// read input from APM_RC - create a control_in value
void set_pwm(int pwm);

Loading…
Cancel
Save