New version of quadcopter software written to OO principles

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

Sensors/Sensors.h

Committer:
joe4465
Date:
2015-05-08
Revision:
4:9ffbf9101992
Parent:
3:4823d6750629

File content as of revision 4:9ffbf9101992:

#include "mbed.h"
#include "Global.h"
#include "rtos.h"
#include "Gps.h"
#include "Imu.h"
#include "Status.h"
#include "LidarLitePwm.h"
#include "Kalman.h"
#include <math.h>

#ifndef Sensors_H
#define Sensors_H

//#define PI 3.14159265

using namespace std;

class Sensors                
{
  public:             
    Sensors(Status& status, ConfigFileWrapper& configFileWrapper, PinName gpsPinTx, PinName gpsPinRx, PinName i2cSda, PinName i2cScl, PinName lidarInterrupt);    
    ~Sensors();
    
    struct Position
    {
        Gps::Value gpsPosition;
        double computedX;
        double computedY;  
    };
    
    struct Altitude
    {
        double lidar;
        double barometer;
        double gps;
        double computed;
    };
    
    void update();
    Imu::Rate getRate();
    Imu::Angle getAngle();
    Gps::Value getGpsValues();
    Imu::Velocity getImuVelocity();
    Sensors::Altitude getAltitude();
    Sensors::Position getPosition();
    Imu::Acceleration getImuAcceleration();
    void enable(bool enable);
    void zeroBarometer();
    void updateImu();
    void zeroAccel();
    void zeroPos();
    
  private:
    void zeroGyro();
    void updateGpsValues();
    void updateAltitude();
    void updateVelocity();
    void updatePosition();
    int getLidarAltitude();
    double toRadian(double deg);
    
    Status& _status;
    Imu::Rate _rate;
    Imu::Angle _angle;
    Position _position;
    Position _startingPosition;
    Altitude _altitude;
    Gps::Value _gpsValues;
    Imu* _imu;
    Gps* _gps;
    LidarLitePwm* _lidar;
    Kalman* _altitudeKalmanFilter;
    Kalman* _xPosKalmanFilter;
    Kalman* _yPosKalmanFilter;
};

#endif