Read heading and velocity pwm in wpilib_interface
Signed-off-by: Ravago Jones <ravagojones@gmail.com>
Change-Id: Ifeeed94b61ca03972debbba52ae1f36022d901a2
diff --git a/frc971/imu/ADIS16505.cc b/frc971/imu/ADIS16505.cc
index 9ed77a9..d3fbf76 100644
--- a/frc971/imu/ADIS16505.cc
+++ b/frc971/imu/ADIS16505.cc
@@ -373,9 +373,7 @@
yaw += yaw_rate * dt;
// 50% is 0; -2000 deg/sec to 2000 deg/sec
- uint16_t rate_level =
- (std::clamp(yaw_rate, -2000.0, 2000.0) / 4000.0 + 0.5) * PWM_TOP;
- pwm_set_gpio_level(RATE_PWM, rate_level);
+ double scaled_rate = (std::clamp(yaw_rate, -2000.0, 2000.0) / 4000.0 + 0.5);
// 0 to 360
double wrapped_heading = fmod(yaw, 360);
@@ -383,8 +381,20 @@
wrapped_heading = wrapped_heading + 360;
}
- uint16_t heading_level = (int16_t)(wrapped_heading / 360.0 * PWM_TOP);
+ double scaled_heading = wrapped_heading / 360.0;
+
+ constexpr double kScaledRangeLow = 0.1;
+ constexpr double kScaledRangeHigh = 0.9;
+
+ uint16_t heading_level =
+ (scaled_heading * (kScaledRangeHigh - kScaledRangeLow) +
+ kScaledRangeLow) *
+ PWM_TOP;
+ uint16_t rate_level =
+ (scaled_rate * (kScaledRangeHigh - kScaledRangeLow) + kScaledRangeLow) *
+ PWM_TOP;
pwm_set_gpio_level(HEADING_PWM, heading_level);
+ pwm_set_gpio_level(RATE_PWM, rate_level);
}
// if 5 or more consecutive checksums are zero, then something weird is going