8#define M_PI 3.14159265358979323846
20#define X_FINE_GAIN 0x03
21#define Y_FINE_GAIN 0x04
22#define Z_FINE_GAIN 0x05
23#define XA_OFFSET_H 0x06
24#define XA_OFFSET_L_TC 0x07
25#define YA_OFFSET_H 0x08
26#define YA_OFFSET_L_TC 0x09
27#define ZA_OFFSET_H 0x0A
28#define ZA_OFFSET_L_TC 0x0B
29#define SELF_TEST_X 0x0D
30#define SELF_TEST_Y 0x0E
31#define SELF_TEST_Z 0x0F
32#define SELF_TEST_A 0x10
33#define XG_OFFS_USRH 0x13
34#define XG_OFFS_USRL 0x14
35#define YG_OFFS_USRH 0x15
36#define YG_OFFS_USRL 0x16
37#define ZG_OFFS_USRH 0x17
38#define ZG_OFFS_USRL 0x18
39#define SMPLRT_DIV 0x19
41#define GYRO_CONFIG 0x1B
42#define ACCEL_CONFIG 0x1C
50#define I2C_MST_CTRL 0x24
51#define I2C_SLV0_ADDR 0x25
52#define I2C_SLV0_REG 0x26
53#define I2C_SLV0_CTRL 0x27
54#define I2C_SLV1_ADDR 0x28
55#define I2C_SLV1_REG 0x29
56#define I2C_SLV1_CTRL 0x2A
57#define I2C_SLV2_ADDR 0x2B
58#define I2C_SLV2_REG 0x2C
59#define I2C_SLV2_CTRL 0x2D
60#define I2C_SLV3_ADDR 0x2E
61#define I2C_SLV3_REG 0x2F
62#define I2C_SLV3_CTRL 0x30
63#define I2C_SLV4_ADDR 0x31
64#define I2C_SLV4_REG 0x32
65#define I2C_SLV4_DO 0x33
66#define I2C_SLV4_CTRL 0x34
67#define I2C_SLV4_DI 0x35
68#define I2C_MST_STATUS 0x36
69#define INT_PIN_CFG 0x37
70#define INT_ENABLE 0x38
71#define DMP_INT_STATUS 0x39
72#define INT_STATUS 0x3A
73#define ACCEL_XOUT_H 0x3B
74#define ACCEL_XOUT_L 0x3C
75#define ACCEL_YOUT_H 0x3D
76#define ACCEL_YOUT_L 0x3E
77#define ACCEL_ZOUT_H 0x3F
78#define ACCEL_ZOUT_L 0x40
79#define TEMP_OUT_H 0x41
80#define TEMP_OUT_L 0x42
81#define GYRO_XOUT_H 0x43
82#define GYRO_XOUT_L 0x44
83#define GYRO_YOUT_H 0x45
84#define GYRO_YOUT_L 0x46
85#define GYRO_ZOUT_H 0x47
86#define GYRO_ZOUT_L 0x48
87#define EXT_SENS_DATA_00 0x49
88#define EXT_SENS_DATA_01 0x4A
89#define EXT_SENS_DATA_02 0x4B
90#define EXT_SENS_DATA_03 0x4C
91#define EXT_SENS_DATA_04 0x4D
92#define EXT_SENS_DATA_05 0x4E
93#define EXT_SENS_DATA_06 0x4F
94#define EXT_SENS_DATA_07 0x50
95#define EXT_SENS_DATA_08 0x51
96#define EXT_SENS_DATA_09 0x52
97#define EXT_SENS_DATA_10 0x53
98#define EXT_SENS_DATA_11 0x54
99#define EXT_SENS_DATA_12 0x55
100#define EXT_SENS_DATA_13 0x56
101#define EXT_SENS_DATA_14 0x57
102#define EXT_SENS_DATA_15 0x58
103#define EXT_SENS_DATA_16 0x59
104#define EXT_SENS_DATA_17 0x5A
105#define EXT_SENS_DATA_18 0x5B
106#define EXT_SENS_DATA_19 0x5C
107#define EXT_SENS_DATA_20 0x5D
108#define EXT_SENS_DATA_21 0x5E
109#define EXT_SENS_DATA_22 0x5F
110#define EXT_SENS_DATA_23 0x60
111#define MOT_DETECT_STATUS 0x61
112#define I2C_SLV0_DO 0x63
113#define I2C_SLV1_DO 0x64
114#define I2C_SLV2_DO 0x65
115#define I2C_SLV3_DO 0x66
116#define I2C_MST_DELAY_CTRL 0x67
117#define SIGNAL_PATH_RESET 0x68
118#define MOT_DETECT_CTRL 0x69
119#define USER_CTRL 0x6A
120#define PWR_MGMT_1 0x6B
121#define PWR_MGMT_2 0x6C
123#define DMP_RW_PNT 0x6E
125#define DMP_REG_1 0x70
126#define DMP_REG_2 0x71
127#define FIFO_COUNTH 0x72
128#define FIFO_COUNTL 0x73
130#define WHO_AM_I_MPU6050 0x75
133#define DATA_RDY_INT 0
158 InterruptIn _interruptIn;
161 int16_t _accelAdc[3];
163 float _gyroBias[3] = { 0 };
164 float _accelBias[3] = { 0 };
170 const float _gyroError =
M_PI * (40.0f / 180.0f);
171 const float _gyroDrift =
M_PI * (2.0f / 180.0f);
174 float _pitch, _yaw, _roll;
175 float _q[4] = { 1.0f, 0.0f, 0.0f, 0.0f };
176 void writeReg(uint8_t reg, uint8_t
byte);
177 uint8_t readReg(uint8_t reg);
178 void readRegBytes(uint8_t reg, uint8_t len, uint8_t* dest);
199 PinName interruptInPin = NC
202 void rise(Callback<
void (
void)>
func);
204 void rise(
T* tptr,
void (
T:: *mptr) (void));
205 void fall(Callback<
void (
void)>
func);
207 void fall(
T* tptr,
void (
T:: *mptr) (void));
const CwiseBinaryOp< internal::scalar_zeta_op< Scalar >, const Derived, const DerivedQ > zeta(const EIGEN_CURRENT_STORAGE_BASE_CLASS< DerivedQ > &q) const
Definition ArrayCwiseBinaryOps.h:355
#define I2C_SDA
Definition Chassis.h:22
#define I2C_SCL
Definition Chassis.h:23
AccelScale
Definition MPU6050.h:137
@ AFS_4G
Definition MPU6050.h:139
@ AFS_8G
Definition MPU6050.h:140
@ AFS_2G
Definition MPU6050.h:138
@ AFS_16G
Definition MPU6050.h:141
#define M_PI
Definition MPU6050.h:8
GyroScale
Definition MPU6050.h:145
@ GFS_250DPS
Definition MPU6050.h:146
@ GFS_2000DPS
Definition MPU6050.h:149
@ GFS_1000DPS
Definition MPU6050.h:148
@ GFS_500DPS
Definition MPU6050.h:147
float yaw()
Calculates yaw in degree.
Definition MPU6050.cpp:787
float accelData[3]
Definition MPU6050.h:183
float * gyro()
Computes gyro.
Definition MPU6050.cpp:647
bool selfTestOK()
Performs accelerometer and gyroscope self test.
Definition MPU6050.cpp:564
void lowPowerAccelOnly()
Configures the motion detection control for low power accelerometer mode.
Definition MPU6050.cpp:326
float & gyroZ
Definition MPU6050.h:190
float & gyroX
Definition MPU6050.h:188
void calibrate()
Calibrates the MPU6050.
Definition MPU6050.cpp:393
float & gyroY
Definition MPU6050.h:189
float gyroData[3]
Definition MPU6050.h:187
float & accelX
Definition MPU6050.h:184
virtual ~MPU6050()
Definition MPU6050.h:201
void reset()
Resets the MPU6050.
Definition MPU6050.cpp:374
bool init()
Initializes the MPU6050.
Definition MPU6050.cpp:131
float pitch()
Calculates pitch in degree.
Definition MPU6050.cpp:804
float & accelY
Definition MPU6050.h:185
float & accelZ
Definition MPU6050.h:186
float * accel()
Computes acceleration.
Definition MPU6050.cpp:629
void madgwickFilter(float deltaT)
Madgwick filter.
Definition MPU6050.cpp:681
float temp()
Definition MPU6050.cpp:311
bool dataReady()
Indicates whether data is available after an interrupt.
Definition MPU6050.cpp:250
float roll()
Claculates roll in degree.
Definition MPU6050.cpp:817
void setGain(float beta, float zeta)
Adjusts filter gain after device is stabilized.
Definition MPU6050.cpp:664
void fall(Callback< void(void)> func)
Definition MPU6050.cpp:65
void rise(Callback< void(void)> func)
Definition MPU6050.cpp:41
Definition benchGeometry.cpp:23