Implemented first Hangar-Service
Dependencies: CalibrateMagneto QuaternionMath
Fork of SML2 by
SensorFusion.h
- Committer:
- uadhikari
- Date:
- 2015-05-20
- Revision:
- 42:160a37bdaa64
- Parent:
- 41:731e3cfac19b
File content as of revision 42:160a37bdaa64:
#ifndef _H_SENSORFUSION_H #define _H_SENSORFUSION_H #include "I2CPeripheral.h" #include "Magnetometer.h" #include "Accelerometer.h" #include "Gyroscope.h" #include "Quaternion.h" class SensorFusion : public Sensor::Delegate { public: class Delegate{ public: virtual void sensorTick(float dt, Vector3 fused, Vector3 accel, Vector3 magneto, Vector3 gyro, Quaternion q){}; }; SensorFusion(I2C &i2c); void setDelegate(Delegate &d); bool start(); void stop(); void getMagnetometerCalibration(Vector3 &min, Vector3 &max); void enableMagnetometer(); void disableMagnetometer(); private: void updateFilter(float ax, float ay, float az, float gx, float gy, float gz, float mx, float my, float mz); void updateFilter(float ax, float ay, float az, float gx, float gy, float gz); class NineAxisSensorFusion : public Sensor::Delegate{ private: SensorFusion* senFuseRef; public: NineAxisSensorFusion(SensorFusion* _ref); void sensorUpdate(Vector3 gyro_degrees); }; class SixAxisSensorFusion : public Sensor::Delegate{ private: SensorFusion* senFuseRef; public: SixAxisSensorFusion(SensorFusion* _ref); void sensorUpdate(Vector3 gyro_degrees); }; //So that these inner classes can acces the private variable of SensorFusion class friend class NineAxisSensorFusion; friend class SixAxisSensorFusion; bool magnetoMeterEnabled; Delegate defaultDelegate; // to avoid check for existence every time Delegate* delegate; NineAxisSensorFusion gyroDelegateWithMagneto; SixAxisSensorFusion gyroDelegateWithoutMagneto; Accelerometer accel; Gyroscope gyro; Magnetometer magneto; Quaternion q; float const deltat, beta; Vector3 fused; }; #endif