AAAAAAAAAAAAAA

Dependents:   measure_1_AAAA

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers MPU6050.h Source File

MPU6050.h

00001 #ifndef __MPU6050_H
00002 #define __MPU6050_H
00003 
00004 #include "mbed.h"
00005 
00006 #define MPU6050_XG_OFFS_TC       0x00
00007 #define MPU6050_YG_OFFS_TC       0x01
00008 #define MPU6050_ZG_OFFS_TC       0x02
00009 #define MPU6050_X_FINE_GAIN      0x03
00010 #define MPU6050_Y_FINE_GAIN      0x04
00011 #define MPU6050_Z_FINE_GAIN      0x05
00012 #define MPU6050_XA_OFFS_H        0x06
00013 #define MPU6050_XA_OFFS_L_TC     0x07
00014 #define MPU6050_YA_OFFS_H        0x08
00015 #define MPU6050_YA_OFFS_L_TC     0x09
00016 #define MPU6050_ZA_OFFS_H        0x0A
00017 #define MPU6050_ZA_OFFS_L_TC     0x0B
00018 #define MPU6050_XG_OFFS_USRH     0x13
00019 #define MPU6050_XG_OFFS_USRL     0x14
00020 #define MPU6050_YG_OFFS_USRH     0x15
00021 #define MPU6050_YG_OFFS_USRL     0x16
00022 #define MPU6050_ZG_OFFS_USRH     0x17
00023 #define MPU6050_ZG_OFFS_USRL     0x18
00024 #define MPU6050_SMPLRT_DIV       0x19
00025 #define MPU6050_CONFIG           0x1A
00026 #define MPU6050_GYRO_CONFIG      0x1B
00027 #define MPU6050_ACCEL_CONFIG     0x1C
00028 #define MPU6050_FF_THR           0x1D
00029 #define MPU6050_FF_DUR           0x1E
00030 #define MPU6050_MOT_THR          0x1F
00031 #define MPU6050_MOT_DUR          0x20
00032 #define MPU6050_ZRMOT_THR        0x21
00033 #define MPU6050_ZRMOT_DUR        0x22
00034 #define MPU6050_FIFO_EN          0x23
00035 #define MPU6050_I2C_MST_CTRL     0x24
00036 #define MPU6050_I2C_SLV0_ADDR    0x25
00037 #define MPU6050_I2C_SLV0_REG     0x26
00038 #define MPU6050_I2C_SLV0_CTRL    0x27
00039 #define MPU6050_I2C_SLV1_ADDR    0x28
00040 #define MPU6050_I2C_SLV1_REG     0x29
00041 #define MPU6050_I2C_SLV1_CTRL    0x2A
00042 #define MPU6050_I2C_SLV2_ADDR    0x2B
00043 #define MPU6050_I2C_SLV2_REG     0x2C
00044 #define MPU6050_I2C_SLV2_CTRL    0x2D
00045 #define MPU6050_I2C_SLV3_ADDR    0x2E
00046 #define MPU6050_I2C_SLV3_REG     0x2F
00047 #define MPU6050_I2C_SLV3_CTRL    0x30
00048 #define MPU6050_I2C_SLV4_ADDR    0x31
00049 #define MPU6050_I2C_SLV4_REG     0x32
00050 #define MPU6050_I2C_SLV4_DO      0x33
00051 #define MPU6050_I2C_SLV4_CTRL    0x34
00052 #define MPU6050_I2C_SLV4_DI      0x35
00053 #define MPU6050_I2C_MST_STATUS   0x36
00054 #define MPU6050_INT_PIN_CFG      0x37
00055 #define MPU6050_INT_ENABLE       0x38
00056 #define MPU6050_DMP_INT_STATUS   0x39
00057 #define MPU6050_INT_STATUS       0x3A
00058 #define MPU6050_ACCEL_XOUT_H     0x3B
00059 #define MPU6050_ACCEL_XOUT_L     0x3C
00060 #define MPU6050_ACCEL_YOUT_H     0x3D
00061 #define MPU6050_ACCEL_YOUT_L     0x3E
00062 #define MPU6050_ACCEL_ZOUT_H     0x3F
00063 #define MPU6050_ACCEL_ZOUT_L     0x40
00064 #define MPU6050_TEMP_OUT_H       0x41
00065 #define MPU6050_TEMP_OUT_L       0x42
00066 #define MPU6050_GYRO_XOUT_H      0x43
00067 #define MPU6050_GYRO_XOUT_L      0x44
00068 #define MPU6050_GYRO_YOUT_H      0x45
00069 #define MPU6050_GYRO_YOUT_L      0x46
00070 #define MPU6050_GYRO_ZOUT_H      0x47
00071 #define MPU6050_GYRO_ZOUT_L      0x48
00072 #define MPU6050_EXT_SENS_DATA_00 0x49
00073 #define MPU6050_EXT_SENS_DATA_01 0x4A
00074 #define MPU6050_EXT_SENS_DATA_02 0x4B
00075 #define MPU6050_EXT_SENS_DATA_03 0x4C
00076 #define MPU6050_EXT_SENS_DATA_04 0x4D
00077 #define MPU6050_EXT_SENS_DATA_05 0x4E
00078 #define MPU6050_EXT_SENS_DATA_06 0x4F
00079 #define MPU6050_EXT_SENS_DATA_07 0x50
00080 #define MPU6050_EXT_SENS_DATA_08 0x51
00081 #define MPU6050_EXT_SENS_DATA_09 0x52
00082 #define MPU6050_EXT_SENS_DATA_10 0x53
00083 #define MPU6050_EXT_SENS_DATA_11 0x54
00084 #define MPU6050_EXT_SENS_DATA_12 0x55
00085 #define MPU6050_EXT_SENS_DATA_13 0x56
00086 #define MPU6050_EXT_SENS_DATA_14 0x57
00087 #define MPU6050_EXT_SENS_DATA_15 0x58
00088 #define MPU6050_EXT_SENS_DATA_16 0x59
00089 #define MPU6050_EXT_SENS_DATA_17 0x5A
00090 #define MPU6050_EXT_SENS_DATA_18 0x5B
00091 #define MPU6050_EXT_SENS_DATA_19 0x5C
00092 #define MPU6050_EXT_SENS_DATA_20 0x5D
00093 #define MPU6050_EXT_SENS_DATA_21 0x5E
00094 #define MPU6050_EXT_SENS_DATA_22 0x5F
00095 #define MPU6050_EXT_SENS_DATA_23 0x60
00096 #define MPU6050_MOT_DETECT_STATUS    0x61
00097 #define MPU6050_I2C_SLV0_DO      0x63
00098 #define MPU6050_I2C_SLV1_DO      0x64
00099 #define MPU6050_I2C_SLV2_DO      0x65
00100 #define MPU6050_I2C_SLV3_DO      0x66
00101 #define MPU6050_I2C_MST_DELAY_CTRL   0x67
00102 #define MPU6050_SIGNAL_PATH_RESET    0x68
00103 #define MPU6050_MOT_DETECT_CTRL      0x69
00104 #define MPU6050_USER_CTRL        0x6A
00105 #define MPU6050_PWR_MGMT_1       0x6B
00106 #define MPU6050_PWR_MGMT_2       0x6C
00107 #define MPU6050_BANK_SEL         0x6D
00108 #define MPU6050_MEM_START_ADDR   0x6E
00109 #define MPU6050_MEM_R_W          0x6F
00110 #define MPU6050_DMP_CFG_1        0x70
00111 #define MPU6050_DMP_CFG_2        0x71
00112 #define MPU6050_FIFO_COUNTH      0x72
00113 #define MPU6050_FIFO_COUNTL      0x73
00114 #define MPU6050_FIFO_R_W         0x74
00115 #define MPU6050_WHO_AM_I         0x75
00116 
00117 /** API for MPC6050
00118 *
00119 * MCP6050 is a 6-axis I2C sensor
00120 *
00121 * @code
00122 * #include "mbed.h"
00123 * #include "MPU6050.h"
00124 *
00125 * MPU6050 mpu(D7,D8);
00126 *
00127 * float gx,gy,gz,ax,ay,az;
00128 *
00129 * int main()
00130 * {
00131 *     if(mpu.getID()==0x68) {
00132 *         printf("MPU6050 OK");
00133 *         wait(1);
00134 *     } else {
00135 *         printf("MPU6050 error ID=0x%x\r\n",mpu.getID());
00136 *         while(1) {
00137 *         }
00138 *     }
00139 *     mpu.start();
00140 *     while(1) {
00141 *         mpu.read(&gx,&gy,&gz,&ax,&ay,&az);
00142 *         printf("gx,gy,gz,ax,ay,az %.1f,%.1f,%.1f,%.2f,%.2f,%.2f\r\n",gx,gy,gz,ax,ay,az);
00143 *         wait(0.1);
00144 *     }
00145 * }
00146 * 
00147 * @endcode
00148 */
00149 class MPU6050
00150 {
00151 public:
00152 
00153     /** Create a MPU6050 Instance
00154     *
00155     *@param sda SDA pin name of I2C
00156     *@param scl SCL pin name of I2C
00157     */
00158     MPU6050(PinName sda, PinName scl, int address);
00159 
00160     /** Init MCP6050
00161     *
00162     * Disable sleep mode
00163     * Set gyro range as +- 1000 deg/s
00164     * Set accel range as +- 4G
00165     * Set sample rate as 470 Hz
00166     */
00167     void start(void);
00168 
00169     /**Get WHO_AM_I
00170     *
00171     * return 0x68
00172     */
00173     char getID(void);
00174 
00175     /**Get data in float
00176     *
00177     * The unit is G or deg/s
00178     */
00179     bool read(float *gx, float *gy, float *gz,float *ax, float *ay, float *az);
00180 
00181     /**Get data in int
00182     *
00183     *return as 16bit value
00184     */
00185     bool readraw(int *gx, int *gy, int *gz,int *ax, int *ay, int *az);
00186 
00187 private:
00188     I2C _MPU6050;
00189     float gx, gy, gz,ax,ay,az;
00190     int ADDRESS;
00191     bool write_reg(int addr_i2c,int addr_reg, char v);
00192     bool read_reg(int addr_i2c,int addr_reg, char *v);
00193     bool read_data(char sad, char sub, char *buf, int length);
00194 };
00195 
00196 #endif