SkyPulse UAV V0.1
Loading...
Searching...
No Matches
MPU6050.h
Go to the documentation of this file.
1#ifndef __MPU6050_H__
2#define __MPU6050_H__
3
4#include <atomic>
5#include <functional>
6
7//#include "Sensor.h"
8#include "IIC.h"
9#include "CppThread.hpp"
10
11#define MPU6050_ADDRESS 0x68
12#define GY_271_ADDRESS 0x0D
13#define IIC_BUS 1
14#define INT_PIN 16 // interrupt pin(BCM)
15#define RAD_TO_DEG 57.295779513082320876798154814105 // radium to degree
16#define DEG_TO_RAD 0.01745329251994329576923690768489 // degree to radium
17#define CALIBRATION_COUNT 5000
18
19extern std::mutex i2cmtx;
20
21class MPU6050 {
22
23public:
24
25 using CallbackFunction = std::function<void(float[], float[], float[])>;
26
27 MPU6050();
28
29 MPU6050(int customSampleRate, int calibrationTimes);
30
31 void getData();
32
33 bool checkNewData();
34
35 void setCallback(CallbackFunction callback);
36
38
39protected:
40
41 void MPU6050ReadData(char* data);
42
43 void calibrateData();
44
45 void GY271ReadData(char* data);
46
47 void setRangeOfAcce(bool needToExit);
48
49 void setRangeOfGyro(bool needToExit);
50
51 friend void interruptHandler(int GPIO, int level, unsigned int tick);
52
53private:
54
55 CallbackFunction callback_;
56
57 IIC iicMPU6050;
58 IIC iicGY271;
59
60 std::atomic<bool> mpu6050_newdata;
61 //std::atomic<bool> mpu6050_reading;
62 std::atomic<bool> calibrate_ready;
63 bool needToExit;
64 int offset_count;
65
66 int calibrationCount;
67
68 char sampleRate;
69
70 std::atomic<float> ax;
71 std::atomic<float> ay;
72 std::atomic<float> az;
73 std::atomic<float> gx;
74 std::atomic<float> gy;
75 std::atomic<float> gz;
76 std::atomic<float> mx;
77 std::atomic<float> my;
78 std::atomic<float> mz;
79
80 // static float ax;
81 // static float ay;
82 // static float az;
83 // static float gx;
84 // static float gy;
85 // static float gz;
86 // static float mx;
87 // static float my;
88 // static float mz;
89
90 char MPU6050RawData[14];
91 char GY271RawData[6];
92
93 float g_offset[3];
94 float a_offset[3];
95 float m_offset[3];
96};
97
98class MPU6050Thread : public CppThread {
99
100public:
101
102 MPU6050Thread(MPU6050& MPU6050Ins_) : MPU6050Ins(MPU6050Ins_) {};
103
104protected:
105
106 void run() override;
107
108private:
109
110 MPU6050& MPU6050Ins;
111
112};
113
114void interruptHandler(int GPIO, int level, unsigned int tick);
115
116void initializeMPUISR();
117
118#endif
std::mutex i2cmtx
void interruptHandler(int GPIO, int level, unsigned int tick)
Definition MPU6050.cpp:219
void initializeMPUISR()
Definition MPU6050.cpp:269
Definition CppThread.hpp:20
Definition IIC.h:12
Definition MPU6050.h:98
void run() override
Definition MPU6050Thread.cpp:10
MPU6050Thread(MPU6050 &MPU6050Ins_)
Definition MPU6050.h:102
Definition MPU6050.h:21
void getData()
Definition MPU6050.cpp:148
void GY271ReadData(char *data)
Definition MPU6050.cpp:93
void MPU6050ReadData(char *data)
Definition MPU6050.cpp:84
void setCallback(CallbackFunction callback)
Definition MPU6050.cpp:142
friend void interruptHandler(int GPIO, int level, unsigned int tick)
Definition MPU6050.cpp:219
std::function< void(float[], float[], float[])> CallbackFunction
Definition MPU6050.h:25
bool checkNewData()
Definition MPU6050.cpp:78
MPU6050()
Definition MPU6050.cpp:10
void setRangeOfGyro(bool needToExit)
Definition MPU6050.cpp:110
static MPU6050 * globalInstance
Definition MPU6050.h:37
void calibrateData()
Definition MPU6050.cpp:182
void setRangeOfAcce(bool needToExit)
Definition MPU6050.cpp:102