a fork of priustroller

Dependencies:   mbed

Fork of priustroller_current by N K

sensors/sensors.h

Committer:
bwang
Date:
2015-03-14
Revision:
28:af9d43bcb371
Parent:
11:dccbaa9274c5
Child:
29:cb03760ba9ea

File content as of revision 28:af9d43bcb371:

#ifndef __SENSORS_H
#define __SENSORS_H

#include "includes.h"

class NativeAnalogIn {
public:
    NativeAnalogIn(PinName pin);
    float Read();
    operator float() {return Read();}
private:
    unsigned char PinToAdcChannel(PinName pin);
private:
    unsigned char _channel;
};

class CurrentSensor {
public:
    virtual float GetCurrent() {return 0.0f;}
    virtual void Zero() {}
};

class VoltageSensor {
public:
    virtual float GetVoltage() {return 0.0f;}
    virtual void Zero(){}
};

class PositionSensor {
public:
    virtual float GetPosition() {return 0.0f;}
};

class TempSensor {
public:
    virtual float GetTemp() {return 0.0f;}
};

class AnalogCurrentSensor: public CurrentSensor {
public:
    AnalogCurrentSensor(PinName pin, float volts_per_amp);
    virtual void Zero();
    virtual float GetCurrent();
private:
    float _zero_level, _volts_per_amp;
    NativeAnalogIn *_in;
};

class AnalogVoltageSensor: public VoltageSensor {
public:
    AnalogVoltageSensor(PinName pin, float scale);
    virtual void Zero();
    virtual float GetVoltage();
private:
    float _zero_level, _scale;
    NativeAnalogIn *_in;
};

class AnalogHallPositionSensor: public PositionSensor {
public:
    AnalogHallPositionSensor(PinName pin_a, PinName pin_b, float cal1_a, float cal2_a, 
                             float cal1_b, float cal2_b, float offset);
    virtual float GetPosition();
private:
    float _cal1_a, _cal2_a;
    float _cal1_b, _cal2_b;
    float _offset;
    NativeAnalogIn *_in_a, *_in_b;
};

class NtcTempSensor: public TempSensor {
public:
    NtcTempSensor(PinName pin, float r_25, float ntc_b, float r_divider);
    virtual float GetTemp();
private:
    float _ntc_a, _ntc_b, _r_divider;
    NativeAnalogIn *_in;
};

class Throttle {
public:
    Throttle(PinName pin, float min, float max);
    float GetThrottle();
private:
    float _min, _max;
    VoltageSensor *_in;
};

#endif