#ifndef __GEBOT_PID_H__
#define __GEBOT_PID_H__

//pid接口
class PID
{
public:
    /* pid构造函数
    * @param input      pid输入的地址
    * @param output     pid输出的地址
    * @param kp,ki,kd   pid参数
    * @param max_output 输出结构的限制值
    */
    PID(float* input, float* feedback, float kp, float ki, float kd, unsigned short max_output);

    // pid计算
    short Compute(float interval);

    // 重置pid的值
    void Clear();
    
    // 更新pid参数
    void Update(float kp, float ki, float kd, unsigned short _maxOutput);
private:
    float kp;
    float ki;
    float kd;
    float max_output;
    float* input;
    float* feedback;
    float err;                 // 比例值
    float integra;             // 积分值
    float derivative;          // 微分值
    float preErr;              // 上一次的输入反馈差值
};

#endif
