#ifndef __PID_H #define __PID_H #include typedef struct { float Kp; float Ki; float Kd; float integral; float prev_error; float output_min; float output_max; float integral_limit; /* anti-windup */ float out; /* latest output */ } PID; void PID_Init(PID *pid, float Kp, float Ki, float Kd, float out_min, float out_max); void PID_SetGains(PID *pid, float Kp, float Ki, float Kd); float PID_Update(PID *pid, float setpoint, float measurement, float dt); void PID_Reset(PID *pid); #endif /* __PID_H */