#ifndef _PID_H_
#define _PID_H_

#include "Arduino.h"

class PID {


public:

  //commonly used functions **************************************************************************
  PID(float point, float kp, float ki, float kd); 
	
  float Update(float input);                     
  void SetOutputLimits(float max_out, float min_out); 
  void SetIntegralLimits(float max_out, float min_out);
  void SetPoint(float point);
	void SetDirection(int8_t dir);
  void UpdateParam(float kp, float ki, float kd);
  void SetIntegral(float integral);
  void SetIntegralOffset(float offset);

  float error_integral;

private:
  float _kp, _ki, _kd;
  float _point;
  float error_integral_offset;
  float input_last;
  float error;
  float output_max, output_min;
  float integral_max, integral_min;
  int8_t _dir;
};

#endif