Senior-Design / software / elevate / src / pid_controller.h
pid_controller.h
Raw
/**
 * @file pid_controller.h
 * 
 * @brief header file for elevate module PID controller
 * 
 * @author Jonathan Lee
 * Contact: jonlee27@seas.upenn.edu
 */
#ifndef PID_CONTROLLER_H_
#define PID_CONTROLLER_H_

/**
 * Mode for PID controller
 * 
 * ON:  PID controller is on
 * OFF: PID controller is off
 */
enum Mode {
  ON,
  OFF
};

class PIDController {
  public:
    PIDController(
      float kp,
      float ki,
      float kd,
      unsigned long pid_rate_ms,
      int minimum_output,
      int maximum_output
    );
    void set_mode(Mode mode);
    int control(long setpoint, long input);

  private:
    float const KP, KI, KD;
    unsigned long const PID_RATE_MS;
    int const MINIMUM_OUTPUT, MAXIMUM_OUTPUT;
    
    Mode mode;
    unsigned long previous_time;
    float integral_term;
    long previous_input;
    int previous_output;
    
    void start();
};

#endif