BeaconAvoid code for AHRC competition.

Dependencies:   MODSERIAL PiSlingers m3pi mbed

PID.h

Committer:
mpanetta
Date:
2016-03-09
Revision:
4:369caebdf5dc
Parent:
0:9ac4a91b71fa

File content as of revision 4:369caebdf5dc:

#ifndef __PID_H__
#define __PID_H__

#include "mbed.h"

class PID
{
public:
    PID(float i_p, float i_i, float i_d) : 
        k_p(i_p), k_i(i_i), k_d(i_d)
        {
            debug      = NULL;
            
            v_p        = 0.0f;
            v_i        = 0.0f;
            v_d        = 0.0f;
            
            clip       = 1.0f;
            error      = 0.0f;
            prev_error = 0.0f;
        }

    PID(float i_p, float i_i, float i_d, Serial *debug) : 
        debug(debug), k_p(i_p), k_i(i_i), k_d(i_d)
        {
            v_p        = 0.0f;
            v_i        = 0.0f;
            v_d        = 0.0f;
            
            clip       = 1.0f;
            error      = 0.0f;
            prev_error = 0.0f;
        }
        
    void  setP(float p);       // set k_p
    void  setI(float i);       // set k_i
    void  setD(float d);       // set k_d
    void  setClip(float clip);
    void  setPV(float pv);     // Set process variable (PID input)
    float getOutput(void);     // Get PID output.
    
    void  run(void);           // Callback to be called via Ticker to execute the PID algo.
    float run(float in);       // Version to run PID in place (not via timer or interrupt)
    
    void dumpDebug(Serial *debug);    
    
private:
    Serial *debug;

    float k_p, k_i, k_d; // PID constants
    float v_p, v_i, v_d; // PID variables
    float clip;   // Integral clip value (absolute)
    float error;
    float prev_error;
    float output;

};

#endif