Buggy bois / Mbed 2 deprecated HEATS_1

Dependencies:   mbed

P.h

Committer:
mazdo25
Date:
2019-03-23
Revision:
4:208f5279143a

File content as of revision 4:208f5279143a:


class P
{
    private:
    float inMin;
    float inMax;
    
    float control;
    
    float outMin;
    float outMax;
    
    float gain;
    float prevCA;
    float controlAction;
    
    public:
    P(float G)
    {
        gain = G;
        outMin = 0.0f;
        outMax = 1.0f;
        control = 0;
    }
    
    void setInputLimits(int inMin_, int inMax_)
    {
        if (inMin_ > inMax_) {return;} //cant be true can it
        inMin = inMin_;
        inMax = inMax_;
    }
    
    void setInMax(float inMax_)
    {
        inMax = inMax_;
    }
    
    float returnPrevCA()
    {
        return prevCA; 
    }
        
    void setOutputLimits(float outMin_, float outMax_)
    {
        if (outMin_ > outMax_) {return;}
        outMin = outMin_;
        outMax = outMax_;
    }
    
    float compute(float curVal_)
    {
        //if the measured value is greater than the measured amount, then clearly the limits are offfffffffffffffff
        if (curVal_ > inMax) {inMax=curVal_;}
        if (curVal_ < inMin) {inMin=curVal_;}
        controlAction = ((control-curVal_)*gain); //amplify the error by the gain
        if (controlAction > inMax ) {controlAction = inMax;}
        if (controlAction < inMin) {controlAction = inMin;}
        float prevCATemp = prevCA;
        prevCA = controlAction;
        controlAction += prevCATemp;
        return (((controlAction-inMin)/(inMax - inMin))*(outMax-outMin))+outMin; //scales temp to the correct output Limits
    }
    
    void setControl(float wantedVal_)
    {
        if (wantedVal_ > inMax) {control = inMax;}
        else if (wantedVal_ < inMin) {control = inMin;}
        else {control = wantedVal_;}
    }
    
    float returnControl(void)
    {
        return control;
    }
    
    float returnInMax()
    {
        return inMax;   
    }
    
};