blob: d6bc696214463142a603e6bbde8dc506358058a6 [file] [log] [blame]
Nathan Leong217cd762022-10-22 16:07:30 -07001#include "frc971/wpilib/wpilib_utils.h"
2
Stephan Pleinesf63bde82024-01-13 15:59:33 -08003namespace frc971::wpilib {
Nathan Leong217cd762022-10-22 16:07:30 -07004
5bool SafePotVoltageRange(::frc971::constants::Range subsystem_range,
6 double potentiometer_offset,
7 ::std::function<double(double)> pot_translate_inverse,
8 bool reverse, double limit_buffer) {
9 constexpr double kMinVoltage = 0.0;
10 constexpr double kMaxVoltage = 5.0;
11 double min_range_voltage =
12 pot_translate_inverse(subsystem_range.lower_hard - potentiometer_offset);
13 double max_range_voltage =
14 pot_translate_inverse(subsystem_range.upper_hard - potentiometer_offset);
15 if (reverse) {
16 min_range_voltage *= -1;
17 max_range_voltage *= -1;
18 }
19 return ((kMinVoltage + limit_buffer) < min_range_voltage &&
20 min_range_voltage < (kMaxVoltage - limit_buffer) &&
21 (kMinVoltage + limit_buffer) < max_range_voltage &&
22 max_range_voltage < (kMaxVoltage - limit_buffer));
23}
Stephan Pleinesf63bde82024-01-13 15:59:33 -080024} // namespace frc971::wpilib