fixed double->PWM values getting wrapped
diff --git a/aos/atom_code/output/motor_output.cc b/aos/atom_code/output/motor_output.cc
index b68dcad..48acc38 100644
--- a/aos/atom_code/output/motor_output.cc
+++ b/aos/atom_code/output/motor_output.cc
@@ -17,13 +17,19 @@
uint8_t MotorOutput::MotorControllerBounds::Map(double value) const {
if (value == 0.0) return kCenter;
+ if (value > 12.0) return Map(12.0);
+ if (value < -12.0) return Map(-12.0);
+ uint8_t r;
if (value > 0.0) {
- return static_cast<uint8_t>(kDeadbandMax + (value * (kMax - kDeadbandMax)) +
- 0.5);
+ r = static_cast<uint8_t>(kDeadbandMax + (value * (kMax - kDeadbandMax)) +
+ 0.5);
} else {
- return static_cast<uint8_t>(kDeadbandMin + (value * (kDeadbandMin - kMin)) +
- 0.5);
+ r = static_cast<uint8_t>(kDeadbandMin + (value * (kDeadbandMin - kMin)) +
+ 0.5);
}
+ if (r < kMin) return kMin;
+ if (r > kMax) return kMax;
+ return r;
}
MotorOutput::MotorOutput()