Satoshi Iyobe / MPU6050

Dependents:   measure_1_BBB measure_1_CCC measure_1_DDD

Committer:
Satoshisatoshi
Date:
Fri May 07 03:27:37 2021 +0000
Revision:
0:3045b1e4107b
Child:
1:c9dc906f8b9f
AAAAAAAAAAAAAAAA

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Satoshisatoshi 0:3045b1e4107b 1 #ifndef __MPU6050_H
Satoshisatoshi 0:3045b1e4107b 2 #define __MPU6050_H
Satoshisatoshi 0:3045b1e4107b 3
Satoshisatoshi 0:3045b1e4107b 4 #include "mbed.h"
Satoshisatoshi 0:3045b1e4107b 5
Satoshisatoshi 0:3045b1e4107b 6 #define MPU6050_XG_OFFS_TC 0x00
Satoshisatoshi 0:3045b1e4107b 7 #define MPU6050_YG_OFFS_TC 0x01
Satoshisatoshi 0:3045b1e4107b 8 #define MPU6050_ZG_OFFS_TC 0x02
Satoshisatoshi 0:3045b1e4107b 9 #define MPU6050_X_FINE_GAIN 0x03
Satoshisatoshi 0:3045b1e4107b 10 #define MPU6050_Y_FINE_GAIN 0x04
Satoshisatoshi 0:3045b1e4107b 11 #define MPU6050_Z_FINE_GAIN 0x05
Satoshisatoshi 0:3045b1e4107b 12 #define MPU6050_XA_OFFS_H 0x06
Satoshisatoshi 0:3045b1e4107b 13 #define MPU6050_XA_OFFS_L_TC 0x07
Satoshisatoshi 0:3045b1e4107b 14 #define MPU6050_YA_OFFS_H 0x08
Satoshisatoshi 0:3045b1e4107b 15 #define MPU6050_YA_OFFS_L_TC 0x09
Satoshisatoshi 0:3045b1e4107b 16 #define MPU6050_ZA_OFFS_H 0x0A
Satoshisatoshi 0:3045b1e4107b 17 #define MPU6050_ZA_OFFS_L_TC 0x0B
Satoshisatoshi 0:3045b1e4107b 18 #define MPU6050_XG_OFFS_USRH 0x13
Satoshisatoshi 0:3045b1e4107b 19 #define MPU6050_XG_OFFS_USRL 0x14
Satoshisatoshi 0:3045b1e4107b 20 #define MPU6050_YG_OFFS_USRH 0x15
Satoshisatoshi 0:3045b1e4107b 21 #define MPU6050_YG_OFFS_USRL 0x16
Satoshisatoshi 0:3045b1e4107b 22 #define MPU6050_ZG_OFFS_USRH 0x17
Satoshisatoshi 0:3045b1e4107b 23 #define MPU6050_ZG_OFFS_USRL 0x18
Satoshisatoshi 0:3045b1e4107b 24 #define MPU6050_SMPLRT_DIV 0x19
Satoshisatoshi 0:3045b1e4107b 25 #define MPU6050_CONFIG 0x1A
Satoshisatoshi 0:3045b1e4107b 26 #define MPU6050_GYRO_CONFIG 0x1B
Satoshisatoshi 0:3045b1e4107b 27 #define MPU6050_ACCEL_CONFIG 0x1C
Satoshisatoshi 0:3045b1e4107b 28 #define MPU6050_FF_THR 0x1D
Satoshisatoshi 0:3045b1e4107b 29 #define MPU6050_FF_DUR 0x1E
Satoshisatoshi 0:3045b1e4107b 30 #define MPU6050_MOT_THR 0x1F
Satoshisatoshi 0:3045b1e4107b 31 #define MPU6050_MOT_DUR 0x20
Satoshisatoshi 0:3045b1e4107b 32 #define MPU6050_ZRMOT_THR 0x21
Satoshisatoshi 0:3045b1e4107b 33 #define MPU6050_ZRMOT_DUR 0x22
Satoshisatoshi 0:3045b1e4107b 34 #define MPU6050_FIFO_EN 0x23
Satoshisatoshi 0:3045b1e4107b 35 #define MPU6050_I2C_MST_CTRL 0x24
Satoshisatoshi 0:3045b1e4107b 36 #define MPU6050_I2C_SLV0_ADDR 0x25
Satoshisatoshi 0:3045b1e4107b 37 #define MPU6050_I2C_SLV0_REG 0x26
Satoshisatoshi 0:3045b1e4107b 38 #define MPU6050_I2C_SLV0_CTRL 0x27
Satoshisatoshi 0:3045b1e4107b 39 #define MPU6050_I2C_SLV1_ADDR 0x28
Satoshisatoshi 0:3045b1e4107b 40 #define MPU6050_I2C_SLV1_REG 0x29
Satoshisatoshi 0:3045b1e4107b 41 #define MPU6050_I2C_SLV1_CTRL 0x2A
Satoshisatoshi 0:3045b1e4107b 42 #define MPU6050_I2C_SLV2_ADDR 0x2B
Satoshisatoshi 0:3045b1e4107b 43 #define MPU6050_I2C_SLV2_REG 0x2C
Satoshisatoshi 0:3045b1e4107b 44 #define MPU6050_I2C_SLV2_CTRL 0x2D
Satoshisatoshi 0:3045b1e4107b 45 #define MPU6050_I2C_SLV3_ADDR 0x2E
Satoshisatoshi 0:3045b1e4107b 46 #define MPU6050_I2C_SLV3_REG 0x2F
Satoshisatoshi 0:3045b1e4107b 47 #define MPU6050_I2C_SLV3_CTRL 0x30
Satoshisatoshi 0:3045b1e4107b 48 #define MPU6050_I2C_SLV4_ADDR 0x31
Satoshisatoshi 0:3045b1e4107b 49 #define MPU6050_I2C_SLV4_REG 0x32
Satoshisatoshi 0:3045b1e4107b 50 #define MPU6050_I2C_SLV4_DO 0x33
Satoshisatoshi 0:3045b1e4107b 51 #define MPU6050_I2C_SLV4_CTRL 0x34
Satoshisatoshi 0:3045b1e4107b 52 #define MPU6050_I2C_SLV4_DI 0x35
Satoshisatoshi 0:3045b1e4107b 53 #define MPU6050_I2C_MST_STATUS 0x36
Satoshisatoshi 0:3045b1e4107b 54 #define MPU6050_INT_PIN_CFG 0x37
Satoshisatoshi 0:3045b1e4107b 55 #define MPU6050_INT_ENABLE 0x38
Satoshisatoshi 0:3045b1e4107b 56 #define MPU6050_DMP_INT_STATUS 0x39
Satoshisatoshi 0:3045b1e4107b 57 #define MPU6050_INT_STATUS 0x3A
Satoshisatoshi 0:3045b1e4107b 58 #define MPU6050_ACCEL_XOUT_H 0x3B
Satoshisatoshi 0:3045b1e4107b 59 #define MPU6050_ACCEL_XOUT_L 0x3C
Satoshisatoshi 0:3045b1e4107b 60 #define MPU6050_ACCEL_YOUT_H 0x3D
Satoshisatoshi 0:3045b1e4107b 61 #define MPU6050_ACCEL_YOUT_L 0x3E
Satoshisatoshi 0:3045b1e4107b 62 #define MPU6050_ACCEL_ZOUT_H 0x3F
Satoshisatoshi 0:3045b1e4107b 63 #define MPU6050_ACCEL_ZOUT_L 0x40
Satoshisatoshi 0:3045b1e4107b 64 #define MPU6050_TEMP_OUT_H 0x41
Satoshisatoshi 0:3045b1e4107b 65 #define MPU6050_TEMP_OUT_L 0x42
Satoshisatoshi 0:3045b1e4107b 66 #define MPU6050_GYRO_XOUT_H 0x43
Satoshisatoshi 0:3045b1e4107b 67 #define MPU6050_GYRO_XOUT_L 0x44
Satoshisatoshi 0:3045b1e4107b 68 #define MPU6050_GYRO_YOUT_H 0x45
Satoshisatoshi 0:3045b1e4107b 69 #define MPU6050_GYRO_YOUT_L 0x46
Satoshisatoshi 0:3045b1e4107b 70 #define MPU6050_GYRO_ZOUT_H 0x47
Satoshisatoshi 0:3045b1e4107b 71 #define MPU6050_GYRO_ZOUT_L 0x48
Satoshisatoshi 0:3045b1e4107b 72 #define MPU6050_EXT_SENS_DATA_00 0x49
Satoshisatoshi 0:3045b1e4107b 73 #define MPU6050_EXT_SENS_DATA_01 0x4A
Satoshisatoshi 0:3045b1e4107b 74 #define MPU6050_EXT_SENS_DATA_02 0x4B
Satoshisatoshi 0:3045b1e4107b 75 #define MPU6050_EXT_SENS_DATA_03 0x4C
Satoshisatoshi 0:3045b1e4107b 76 #define MPU6050_EXT_SENS_DATA_04 0x4D
Satoshisatoshi 0:3045b1e4107b 77 #define MPU6050_EXT_SENS_DATA_05 0x4E
Satoshisatoshi 0:3045b1e4107b 78 #define MPU6050_EXT_SENS_DATA_06 0x4F
Satoshisatoshi 0:3045b1e4107b 79 #define MPU6050_EXT_SENS_DATA_07 0x50
Satoshisatoshi 0:3045b1e4107b 80 #define MPU6050_EXT_SENS_DATA_08 0x51
Satoshisatoshi 0:3045b1e4107b 81 #define MPU6050_EXT_SENS_DATA_09 0x52
Satoshisatoshi 0:3045b1e4107b 82 #define MPU6050_EXT_SENS_DATA_10 0x53
Satoshisatoshi 0:3045b1e4107b 83 #define MPU6050_EXT_SENS_DATA_11 0x54
Satoshisatoshi 0:3045b1e4107b 84 #define MPU6050_EXT_SENS_DATA_12 0x55
Satoshisatoshi 0:3045b1e4107b 85 #define MPU6050_EXT_SENS_DATA_13 0x56
Satoshisatoshi 0:3045b1e4107b 86 #define MPU6050_EXT_SENS_DATA_14 0x57
Satoshisatoshi 0:3045b1e4107b 87 #define MPU6050_EXT_SENS_DATA_15 0x58
Satoshisatoshi 0:3045b1e4107b 88 #define MPU6050_EXT_SENS_DATA_16 0x59
Satoshisatoshi 0:3045b1e4107b 89 #define MPU6050_EXT_SENS_DATA_17 0x5A
Satoshisatoshi 0:3045b1e4107b 90 #define MPU6050_EXT_SENS_DATA_18 0x5B
Satoshisatoshi 0:3045b1e4107b 91 #define MPU6050_EXT_SENS_DATA_19 0x5C
Satoshisatoshi 0:3045b1e4107b 92 #define MPU6050_EXT_SENS_DATA_20 0x5D
Satoshisatoshi 0:3045b1e4107b 93 #define MPU6050_EXT_SENS_DATA_21 0x5E
Satoshisatoshi 0:3045b1e4107b 94 #define MPU6050_EXT_SENS_DATA_22 0x5F
Satoshisatoshi 0:3045b1e4107b 95 #define MPU6050_EXT_SENS_DATA_23 0x60
Satoshisatoshi 0:3045b1e4107b 96 #define MPU6050_MOT_DETECT_STATUS 0x61
Satoshisatoshi 0:3045b1e4107b 97 #define MPU6050_I2C_SLV0_DO 0x63
Satoshisatoshi 0:3045b1e4107b 98 #define MPU6050_I2C_SLV1_DO 0x64
Satoshisatoshi 0:3045b1e4107b 99 #define MPU6050_I2C_SLV2_DO 0x65
Satoshisatoshi 0:3045b1e4107b 100 #define MPU6050_I2C_SLV3_DO 0x66
Satoshisatoshi 0:3045b1e4107b 101 #define MPU6050_I2C_MST_DELAY_CTRL 0x67
Satoshisatoshi 0:3045b1e4107b 102 #define MPU6050_SIGNAL_PATH_RESET 0x68
Satoshisatoshi 0:3045b1e4107b 103 #define MPU6050_MOT_DETECT_CTRL 0x69
Satoshisatoshi 0:3045b1e4107b 104 #define MPU6050_USER_CTRL 0x6A
Satoshisatoshi 0:3045b1e4107b 105 #define MPU6050_PWR_MGMT_1 0x6B
Satoshisatoshi 0:3045b1e4107b 106 #define MPU6050_PWR_MGMT_2 0x6C
Satoshisatoshi 0:3045b1e4107b 107 #define MPU6050_BANK_SEL 0x6D
Satoshisatoshi 0:3045b1e4107b 108 #define MPU6050_MEM_START_ADDR 0x6E
Satoshisatoshi 0:3045b1e4107b 109 #define MPU6050_MEM_R_W 0x6F
Satoshisatoshi 0:3045b1e4107b 110 #define MPU6050_DMP_CFG_1 0x70
Satoshisatoshi 0:3045b1e4107b 111 #define MPU6050_DMP_CFG_2 0x71
Satoshisatoshi 0:3045b1e4107b 112 #define MPU6050_FIFO_COUNTH 0x72
Satoshisatoshi 0:3045b1e4107b 113 #define MPU6050_FIFO_COUNTL 0x73
Satoshisatoshi 0:3045b1e4107b 114 #define MPU6050_FIFO_R_W 0x74
Satoshisatoshi 0:3045b1e4107b 115 #define MPU6050_WHO_AM_I 0x75
Satoshisatoshi 0:3045b1e4107b 116
Satoshisatoshi 0:3045b1e4107b 117 /** API for MPC6050
Satoshisatoshi 0:3045b1e4107b 118 *
Satoshisatoshi 0:3045b1e4107b 119 * MCP6050 is a 6-axis I2C sensor
Satoshisatoshi 0:3045b1e4107b 120 *
Satoshisatoshi 0:3045b1e4107b 121 * @code
Satoshisatoshi 0:3045b1e4107b 122 * #include "mbed.h"
Satoshisatoshi 0:3045b1e4107b 123 * #include "MPU6050.h"
Satoshisatoshi 0:3045b1e4107b 124 *
Satoshisatoshi 0:3045b1e4107b 125 * MPU6050 mpu(D7,D8);
Satoshisatoshi 0:3045b1e4107b 126 *
Satoshisatoshi 0:3045b1e4107b 127 * float gx,gy,gz,ax,ay,az;
Satoshisatoshi 0:3045b1e4107b 128 *
Satoshisatoshi 0:3045b1e4107b 129 * int main()
Satoshisatoshi 0:3045b1e4107b 130 * {
Satoshisatoshi 0:3045b1e4107b 131 * if(mpu.getID()==0x68) {
Satoshisatoshi 0:3045b1e4107b 132 * printf("MPU6050 OK");
Satoshisatoshi 0:3045b1e4107b 133 * wait(1);
Satoshisatoshi 0:3045b1e4107b 134 * } else {
Satoshisatoshi 0:3045b1e4107b 135 * printf("MPU6050 error ID=0x%x\r\n",mpu.getID());
Satoshisatoshi 0:3045b1e4107b 136 * while(1) {
Satoshisatoshi 0:3045b1e4107b 137 * }
Satoshisatoshi 0:3045b1e4107b 138 * }
Satoshisatoshi 0:3045b1e4107b 139 * mpu.start();
Satoshisatoshi 0:3045b1e4107b 140 * while(1) {
Satoshisatoshi 0:3045b1e4107b 141 * mpu.read(&gx,&gy,&gz,&ax,&ay,&az);
Satoshisatoshi 0:3045b1e4107b 142 * printf("gx,gy,gz,ax,ay,az %.1f,%.1f,%.1f,%.2f,%.2f,%.2f\r\n",gx,gy,gz,ax,ay,az);
Satoshisatoshi 0:3045b1e4107b 143 * wait(0.1);
Satoshisatoshi 0:3045b1e4107b 144 * }
Satoshisatoshi 0:3045b1e4107b 145 * }
Satoshisatoshi 0:3045b1e4107b 146 * 
Satoshisatoshi 0:3045b1e4107b 147 * @endcode
Satoshisatoshi 0:3045b1e4107b 148 */
Satoshisatoshi 0:3045b1e4107b 149 class MPU6050
Satoshisatoshi 0:3045b1e4107b 150 {
Satoshisatoshi 0:3045b1e4107b 151 public:
Satoshisatoshi 0:3045b1e4107b 152
Satoshisatoshi 0:3045b1e4107b 153 /** Create a MPU6050 Instance
Satoshisatoshi 0:3045b1e4107b 154 *
Satoshisatoshi 0:3045b1e4107b 155 *@param sda SDA pin name of I2C
Satoshisatoshi 0:3045b1e4107b 156 *@param scl SCL pin name of I2C
Satoshisatoshi 0:3045b1e4107b 157 */
Satoshisatoshi 0:3045b1e4107b 158 MPU6050(PinName sda, PinName scl, int address);
Satoshisatoshi 0:3045b1e4107b 159
Satoshisatoshi 0:3045b1e4107b 160 /** Init MCP6050
Satoshisatoshi 0:3045b1e4107b 161 *
Satoshisatoshi 0:3045b1e4107b 162 * Disable sleep mode
Satoshisatoshi 0:3045b1e4107b 163 * Set gyro range as +- 1000 deg/s
Satoshisatoshi 0:3045b1e4107b 164 * Set accel range as +- 4G
Satoshisatoshi 0:3045b1e4107b 165 * Set sample rate as 470 Hz
Satoshisatoshi 0:3045b1e4107b 166 */
Satoshisatoshi 0:3045b1e4107b 167 void start(void);
Satoshisatoshi 0:3045b1e4107b 168
Satoshisatoshi 0:3045b1e4107b 169 /**Get WHO_AM_I
Satoshisatoshi 0:3045b1e4107b 170 *
Satoshisatoshi 0:3045b1e4107b 171 * return 0x68
Satoshisatoshi 0:3045b1e4107b 172 */
Satoshisatoshi 0:3045b1e4107b 173 char getID(void);
Satoshisatoshi 0:3045b1e4107b 174
Satoshisatoshi 0:3045b1e4107b 175 /**Get data in float
Satoshisatoshi 0:3045b1e4107b 176 *
Satoshisatoshi 0:3045b1e4107b 177 * The unit is G or deg/s
Satoshisatoshi 0:3045b1e4107b 178 */
Satoshisatoshi 0:3045b1e4107b 179 bool read(float *gx, float *gy, float *gz,float *ax, float *ay, float *az);
Satoshisatoshi 0:3045b1e4107b 180
Satoshisatoshi 0:3045b1e4107b 181 /**Get data in int
Satoshisatoshi 0:3045b1e4107b 182 *
Satoshisatoshi 0:3045b1e4107b 183 *return as 16bit value
Satoshisatoshi 0:3045b1e4107b 184 */
Satoshisatoshi 0:3045b1e4107b 185 bool readraw(int *gx, int *gy, int *gz,int *ax, int *ay, int *az);
Satoshisatoshi 0:3045b1e4107b 186
Satoshisatoshi 0:3045b1e4107b 187 private:
Satoshisatoshi 0:3045b1e4107b 188 I2C _MPU6050;
Satoshisatoshi 0:3045b1e4107b 189 float gx, gy, gz,ax,ay,az;
Satoshisatoshi 0:3045b1e4107b 190 int ADDRESS;
Satoshisatoshi 0:3045b1e4107b 191 bool write_reg(int addr_i2c,int addr_reg, char v);
Satoshisatoshi 0:3045b1e4107b 192 bool read_reg(int addr_i2c,int addr_reg, char *v);
Satoshisatoshi 0:3045b1e4107b 193 bool read_data(char sad, char sub, char *buf, int length);
Satoshisatoshi 0:3045b1e4107b 194 };
Satoshisatoshi 0:3045b1e4107b 195
Satoshisatoshi 0:3045b1e4107b 196 #endif