6 #include "../numeric/value.h" 26 : integrator(0, {
bottom, top }), last_input(0) { }
30 : params(params), state(params.
bottom, params.
top) {}
46 state =
State(params.bottom, params.top);
49 T
step(T input, T desired_value) {
50 T error(desired_value - input);
51 state.integrator = state.integrator.get() + params.i * error;
54 - params.d * (input - state.last_input),
55 { params.bottom, params.top });
57 state.last_input = input;
62 T
step(T input, T desired_value, T time_step) {
63 T error(desired_value - input);
64 state.integrator = state.integrator.get() + params.i * error * time_step;
67 - (params.d * (input - state.last_input) / time_step),
68 { params.bottom, params.top });
70 state.last_input = input;
T step(T input, T desired_value)
Definition: pid.h:49
T last_input
Definition: pid.h:23
Config get_params() const
Definition: pid.h:32
void set_params(Config &p)
Definition: pid.h:36
State get_state() const
Definition: pid.h:41
Pid(const Config ¶ms)
Definition: pid.h:29
T top
Definition: pid.h:18
T step(T input, T desired_value, T time_step)
Definition: pid.h:62
State(const T &bottom, const T &top)
Definition: pid.h:25
void reset()
Definition: pid.h:45
T bottom
Definition: pid.h:17
Value< T, Clamped > integrator
Definition: pid.h:22