29 lines
688 B
C++
29 lines
688 B
C++
#pragma once
|
|
#include "types.hpp"
|
|
|
|
class PID {
|
|
public:
|
|
PID(float kp = 0, float ki = 0, float kd = 0, float target = 0,
|
|
PIDMode mode = PID_INCREMENTAL, float out_limit = 100, float int_limit = 100);
|
|
|
|
float update(float measured);
|
|
void setTarget(float t) { _target = t; }
|
|
void setPID(float kp, float ki, float kd);
|
|
void setMode(PIDMode m) { _mode = m; }
|
|
void reset();
|
|
|
|
float output() const { return _output; }
|
|
|
|
private:
|
|
float _kp, _ki, _kd;
|
|
float _target;
|
|
PIDMode _mode;
|
|
float _out_limit, _int_limit;
|
|
|
|
float _output;
|
|
float _integral;
|
|
float _prev_error;
|
|
float _last_measured;
|
|
bool _first;
|
|
};
|