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