YMotorDriverServo.h

Committer:
inst
Date:
2015-10-14
Revision:
2:16e29a3a8f58
Parent:
1:d1ca02f9536c

File content as of revision 2:16e29a3a8f58:

#ifndef INCLUDED_YMOTOR_DRIVER_SERVO_H
#define INCLUDED_YMOTOR_DRIVER_SERVO_H

#include "mbed.h"
#include "YMotorDriverBase.h"
#include "PID.h"

class YMotorDriverServo : public YMotorDriverBase, public PID{
public:
    YMotorDriverServo( char address, int id );
    ~YMotorDriverServo();
    
protected:
    void stop(){
        mTargetPosition = mPosition;
    }
    void setTargetPosition( float p ){
        if ( p < 0.0f ){
            p = 0.0f;
        } else if ( p > 1.0f ){
            p = 1.0f;
        }
        mTargetPosition = ( mServoRangeMax[ mID ] - mServoRangeMin[ mID ] ) * p + mServoRangeMin[ mID ];
    }
    float getPosition(){
        return mPosition;
    }
    float getTargetPosition(){
        return mTargetPosition;
    }
    
private:
    virtual void updateSpecial();
    virtual void updateI2CSlave();
    virtual void control( float c );
    virtual void updateServoSpecial(){}

    static const float mAllowableError[];
    static const PinName mAnalogInPinName;
    static const float mLowPassFilterCoeff[];
    static const float mPCoeff[];
    static const float mICoeff[];
    static const float mDCoeff[];
    static const float mServoMaxDuty[];
    static const float mServoMinDuty[];
    static const float mServoRangeMin[];
    static const float mServoRangeMax[];
    
    AnalogIn* mAnalogIn;
    float mPosition;
    float mTargetPosition;
    bool mHasWorked;
    int mID;
};

#endif