/*
 * pid_controller.h
 *
 *  Created on: Apr 24, 2016
 *      Author: subham roy
 */

#ifndef __PID_CONTROLLER_H
#define __PID_CONTROLLER_H

typedef struct {
  /* PID controller parameters */
  double Kp;
  double Ki;
  double Kd;
  
  /* max output limits for the PID controller */
  double output_max;
  double output_min;
  
  /* below are session variables for the PID controller */
  double _integral_sum;
  double _prev_err;
  double _dt;
} PID_vars;


#define PID_VARS_INIT(x) PID_vars x = {.Kp=1.0,.Ki=0.00,.Kd=0.1,.output_max=15000.0, \
                       .output_min=-15000.0,._integral_sum=0.0,._prev_err=0.0,._dt=1.0}

/* Function Prototypes */
double pid(PID_vars *vars, double current_err);

#endif
