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-04-01
Revision:
2:969dfa4f2436
Parent:
0:c6a85bb2a827
Child:
3:4823d6750629

File content as of revision 2:969dfa4f2436:

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

#ifndef Sensors_H
#define Sensors_H

#define PI 3.14159265

class Sensors                
{
  public:             
    Sensors(Status& status, ConfigFileWrapper& configFileWrapper, PinName gpsPinTx, PinName gpsPinRx, PinName i2cSda, PinName i2cScl, PinName lidarInterrupt);    
    ~Sensors();
    
    struct Position
    {
        double accelX;
        double accelY;
        double accelZ;
        double latitude;
        double longitude;
        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();
    double getZVelocity();
    Sensors::Altitude getAltitude();
    Sensors::Position getPosition();
    void enable(bool enable);
    void zeroBarometer();
    void updateImu();
    void zeroAccel();
    
  private:
    void zeroGyro();
    void updateGpsValues();
    void updateAltitude();
    void updateVelocity();
    void updatePosition();
    int getLidarAltitude();
    
    Status& _status;
    Imu::Rate _rate;
    Imu::Angle _angle;
    Position _position;
    Altitude _altitude;
    Gps::Value _gpsValues;
    Imu* _imu;
    Gps* _gps;
    LidarLitePwm* _lidar;
    Kalman* _altitudeKalmanFilter;
};

#endif