RIT VEXU Core API
Loading...
Searching...
No Matches
math/controls/bang_bang.h
1#pragma once
2
3#include <cmath>
4
5namespace core {
6
22class BangBang {
23 public:
30 BangBang(double tolerance, double setpoint)
31 : tolerance_(tolerance), setpoint_(setpoint) {}
32
33 BangBang(const BangBang&) = default;
34 BangBang(BangBang&&) = default;
35 BangBang& operator=(const BangBang&) = default;
36 BangBang& operator=(BangBang&&) = default;
37
45 double calculate(double measurement, double setpoint) {
46 measurement_ = measurement;
47 setpoint_ = setpoint;
48
49 return measurement < setpoint ? 1 : 0;
50 }
51
58 double calculate(double measurement) {
59 return calculate(measurement, setpoint_);
60 }
61
67 bool at_setpoint() {
68 return std::abs(setpoint_ - measurement_) < tolerance_;
69 }
70
71 double tolerance() const { return tolerance_; }
72 double setpoint() const { return setpoint_; }
73
74 void set_tolerance(double tolerance) { tolerance_ = tolerance; }
75 void set_setpoint(double setpoint) { setpoint_ = setpoint; }
76
77 private:
78 double tolerance_;
79 double setpoint_;
80 double measurement_;
81};
82
83} // namespace core
Definition math/controls/bang_bang.h:22
bool at_setpoint()
Definition math/controls/bang_bang.h:67
double calculate(double measurement)
Definition math/controls/bang_bang.h:58
double calculate(double measurement, double setpoint)
Definition math/controls/bang_bang.h:45
BangBang(double tolerance, double setpoint)
Definition math/controls/bang_bang.h:30