New version of quadcopter software written to OO principles

Dependencies:   mbed MODSERIAL filter mbed-rtos ConfigFile PID PPM FreeIMU_external_magnetometer TinyGPS

Global/PidWrapper/PidWrapper.cpp

Committer:
joe4465
Date:
2015-05-08
Revision:
4:9ffbf9101992
Parent:
2:969dfa4f2436

File content as of revision 4:9ffbf9101992:

#include "PidWrapper.h"

PidWrapper::PidWrapper(){}

PidWrapper::~PidWrapper(){}

bool PidWrapper::initialise(PidParameter pidParameter, double inputMin, double inputMax, double outputMin, double outputMax, float updateTime)
{
    _pid = new PID(pidParameter.p, pidParameter.i, pidParameter.d, updateTime);
    _pid->setInputLimits(inputMin, inputMax);
    _pid->setOutputLimits(outputMin, outputMax);
    _pid->setMode(AUTO_MODE);
    _pid->setSetPoint(0.0);
    _pid->setBias(0);
    
    DEBUG("PID wrapper initialised\r\n");
    return true; 
}

double PidWrapper::compute(double setPoint, double processValue)
{
    _pid->setSetPoint(setPoint);
    _pid->setProcessValue(processValue);
    return _pid->compute();   
}

PidWrapper::PidParameter  PidWrapper::getPidParameters()
{
    PidWrapper::PidParameter pidParameters;
    pidParameters.p = _pid->getPParam();    
    pidParameters.i = _pid->getIParam(); 
    pidParameters.d = _pid->getDParam(); 
    
    return pidParameters;
}

void PidWrapper::reset()
{
    _pid->reset();
}

void PidWrapper::setPidParameters(PidWrapper::PidParameter pidParameters)
{
    _pid->setTunings(pidParameters.p, pidParameters.i, pidParameters.d);
    DEBUG("P %1.8f, I %1.8f, D %1.8f\r\n", pidParameters.p, pidParameters.i, pidParameters.d);
}

void PidWrapper::setBias(float bias)
{
    _pid->setBias(bias);
}