9Axis IMU MPU9150 's library. This project is ported from this Arduino's project https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU9150. Connect pinName 27 to SCL, PinName 28 to SDA, GND to GND, and VOUT to VCC to try this library. The example is here
Dependencies: ArduinoSerial I2Cdev
MPU9150.h
00001 #ifndef _MPU9150_H_ 00002 #define _MPU9150_H_ 00003 00004 #include "I2Cdev.h" 00005 00006 // supporting link: http://forum.arduino.cc/index.php?&topic=143444.msg1079517#msg1079517 00007 // also: http://forum.arduino.cc/index.php?&topic=141571.msg1062899#msg1062899s 00008 #ifdef __AVR__ 00009 #include <avr/pgmspace.h> 00010 #else 00011 #define PROGMEM /* empty */ 00012 #define pgm_read_byte(x) (*(x)) 00013 #define pgm_read_word(x) (*(x)) 00014 #define pgm_read_float(x) (*(x)) 00015 #define PSTR(STR) STR 00016 #endif 00017 00018 //Magnetometer Registers 00019 #define MPU9150_RA_MAG_ADDRESS 0x0C 00020 #define MPU9150_RA_MAG_XOUT_L 0x03 00021 #define MPU9150_RA_MAG_XOUT_H 0x04 00022 #define MPU9150_RA_MAG_YOUT_L 0x05 00023 #define MPU9150_RA_MAG_YOUT_H 0x06 00024 #define MPU9150_RA_MAG_ZOUT_L 0x07 00025 #define MPU9150_RA_MAG_ZOUT_H 0x08 00026 00027 #define MPU9150_ADDRESS_AD0_LOW 0x68 // address pin low (GND), default for InvenSense evaluation board 00028 #define MPU9150_ADDRESS_AD0_HIGH 0x69 // address pin high (VCC) 00029 #define MPU9150_DEFAULT_ADDRESS MPU9150_ADDRESS_AD0_LOW 00030 00031 #define MPU9150_RA_XG_OFFS_TC 0x00 //[7] PWR_MODE, [6:1] XG_OFFS_TC, [0] OTP_BNK_VLD 00032 #define MPU9150_RA_YG_OFFS_TC 0x01 //[7] PWR_MODE, [6:1] YG_OFFS_TC, [0] OTP_BNK_VLD 00033 #define MPU9150_RA_ZG_OFFS_TC 0x02 //[7] PWR_MODE, [6:1] ZG_OFFS_TC, [0] OTP_BNK_VLD 00034 #define MPU9150_RA_X_FINE_GAIN 0x03 //[7:0] X_FINE_GAIN 00035 #define MPU9150_RA_Y_FINE_GAIN 0x04 //[7:0] Y_FINE_GAIN 00036 #define MPU9150_RA_Z_FINE_GAIN 0x05 //[7:0] Z_FINE_GAIN 00037 #define MPU9150_RA_XA_OFFS_H 0x06 //[15:0] XA_OFFS 00038 #define MPU9150_RA_XA_OFFS_L_TC 0x07 00039 #define MPU9150_RA_YA_OFFS_H 0x08 //[15:0] YA_OFFS 00040 #define MPU9150_RA_YA_OFFS_L_TC 0x09 00041 #define MPU9150_RA_ZA_OFFS_H 0x0A //[15:0] ZA_OFFS 00042 #define MPU9150_RA_ZA_OFFS_L_TC 0x0B 00043 #define MPU9150_RA_XG_OFFS_USRH 0x13 //[15:0] XG_OFFS_USR 00044 #define MPU9150_RA_XG_OFFS_USRL 0x14 00045 #define MPU9150_RA_YG_OFFS_USRH 0x15 //[15:0] YG_OFFS_USR 00046 #define MPU9150_RA_YG_OFFS_USRL 0x16 00047 #define MPU9150_RA_ZG_OFFS_USRH 0x17 //[15:0] ZG_OFFS_USR 00048 #define MPU9150_RA_ZG_OFFS_USRL 0x18 00049 #define MPU9150_RA_SMPLRT_DIV 0x19 00050 #define MPU9150_RA_CONFIG 0x1A 00051 #define MPU9150_RA_GYRO_CONFIG 0x1B 00052 #define MPU9150_RA_ACCEL_CONFIG 0x1C 00053 #define MPU9150_RA_FF_THR 0x1D 00054 #define MPU9150_RA_FF_DUR 0x1E 00055 #define MPU9150_RA_MOT_THR 0x1F 00056 #define MPU9150_RA_MOT_DUR 0x20 00057 #define MPU9150_RA_ZRMOT_THR 0x21 00058 #define MPU9150_RA_ZRMOT_DUR 0x22 00059 #define MPU9150_RA_FIFO_EN 0x23 00060 #define MPU9150_RA_I2C_MST_CTRL 0x24 00061 #define MPU9150_RA_I2C_SLV0_ADDR 0x25 00062 #define MPU9150_RA_I2C_SLV0_REG 0x26 00063 #define MPU9150_RA_I2C_SLV0_CTRL 0x27 00064 #define MPU9150_RA_I2C_SLV1_ADDR 0x28 00065 #define MPU9150_RA_I2C_SLV1_REG 0x29 00066 #define MPU9150_RA_I2C_SLV1_CTRL 0x2A 00067 #define MPU9150_RA_I2C_SLV2_ADDR 0x2B 00068 #define MPU9150_RA_I2C_SLV2_REG 0x2C 00069 #define MPU9150_RA_I2C_SLV2_CTRL 0x2D 00070 #define MPU9150_RA_I2C_SLV3_ADDR 0x2E 00071 #define MPU9150_RA_I2C_SLV3_REG 0x2F 00072 #define MPU9150_RA_I2C_SLV3_CTRL 0x30 00073 #define MPU9150_RA_I2C_SLV4_ADDR 0x31 00074 #define MPU9150_RA_I2C_SLV4_REG 0x32 00075 #define MPU9150_RA_I2C_SLV4_DO 0x33 00076 #define MPU9150_RA_I2C_SLV4_CTRL 0x34 00077 #define MPU9150_RA_I2C_SLV4_DI 0x35 00078 #define MPU9150_RA_I2C_MST_STATUS 0x36 00079 #define MPU9150_RA_INT_PIN_CFG 0x37 00080 #define MPU9150_RA_INT_ENABLE 0x38 00081 #define MPU9150_RA_DMP_INT_STATUS 0x39 00082 #define MPU9150_RA_INT_STATUS 0x3A 00083 #define MPU9150_RA_ACCEL_XOUT_H 0x3B 00084 #define MPU9150_RA_ACCEL_XOUT_L 0x3C 00085 #define MPU9150_RA_ACCEL_YOUT_H 0x3D 00086 #define MPU9150_RA_ACCEL_YOUT_L 0x3E 00087 #define MPU9150_RA_ACCEL_ZOUT_H 0x3F 00088 #define MPU9150_RA_ACCEL_ZOUT_L 0x40 00089 #define MPU9150_RA_TEMP_OUT_H 0x41 00090 #define MPU9150_RA_TEMP_OUT_L 0x42 00091 #define MPU9150_RA_GYRO_XOUT_H 0x43 00092 #define MPU9150_RA_GYRO_XOUT_L 0x44 00093 #define MPU9150_RA_GYRO_YOUT_H 0x45 00094 #define MPU9150_RA_GYRO_YOUT_L 0x46 00095 #define MPU9150_RA_GYRO_ZOUT_H 0x47 00096 #define MPU9150_RA_GYRO_ZOUT_L 0x48 00097 #define MPU9150_RA_EXT_SENS_DATA_00 0x49 00098 #define MPU9150_RA_EXT_SENS_DATA_01 0x4A 00099 #define MPU9150_RA_EXT_SENS_DATA_02 0x4B 00100 #define MPU9150_RA_EXT_SENS_DATA_03 0x4C 00101 #define MPU9150_RA_EXT_SENS_DATA_04 0x4D 00102 #define MPU9150_RA_EXT_SENS_DATA_05 0x4E 00103 #define MPU9150_RA_EXT_SENS_DATA_06 0x4F 00104 #define MPU9150_RA_EXT_SENS_DATA_07 0x50 00105 #define MPU9150_RA_EXT_SENS_DATA_08 0x51 00106 #define MPU9150_RA_EXT_SENS_DATA_09 0x52 00107 #define MPU9150_RA_EXT_SENS_DATA_10 0x53 00108 #define MPU9150_RA_EXT_SENS_DATA_11 0x54 00109 #define MPU9150_RA_EXT_SENS_DATA_12 0x55 00110 #define MPU9150_RA_EXT_SENS_DATA_13 0x56 00111 #define MPU9150_RA_EXT_SENS_DATA_14 0x57 00112 #define MPU9150_RA_EXT_SENS_DATA_15 0x58 00113 #define MPU9150_RA_EXT_SENS_DATA_16 0x59 00114 #define MPU9150_RA_EXT_SENS_DATA_17 0x5A 00115 #define MPU9150_RA_EXT_SENS_DATA_18 0x5B 00116 #define MPU9150_RA_EXT_SENS_DATA_19 0x5C 00117 #define MPU9150_RA_EXT_SENS_DATA_20 0x5D 00118 #define MPU9150_RA_EXT_SENS_DATA_21 0x5E 00119 #define MPU9150_RA_EXT_SENS_DATA_22 0x5F 00120 #define MPU9150_RA_EXT_SENS_DATA_23 0x60 00121 #define MPU9150_RA_MOT_DETECT_STATUS 0x61 00122 #define MPU9150_RA_I2C_SLV0_DO 0x63 00123 #define MPU9150_RA_I2C_SLV1_DO 0x64 00124 #define MPU9150_RA_I2C_SLV2_DO 0x65 00125 #define MPU9150_RA_I2C_SLV3_DO 0x66 00126 #define MPU9150_RA_I2C_MST_DELAY_CTRL 0x67 00127 #define MPU9150_RA_SIGNAL_PATH_RESET 0x68 00128 #define MPU9150_RA_MOT_DETECT_CTRL 0x69 00129 #define MPU9150_RA_USER_CTRL 0x6A 00130 #define MPU9150_RA_PWR_MGMT_1 0x6B 00131 #define MPU9150_RA_PWR_MGMT_2 0x6C 00132 #define MPU9150_RA_BANK_SEL 0x6D 00133 #define MPU9150_RA_MEM_START_ADDR 0x6E 00134 #define MPU9150_RA_MEM_R_W 0x6F 00135 #define MPU9150_RA_DMP_CFG_1 0x70 00136 #define MPU9150_RA_DMP_CFG_2 0x71 00137 #define MPU9150_RA_FIFO_COUNTH 0x72 00138 #define MPU9150_RA_FIFO_COUNTL 0x73 00139 #define MPU9150_RA_FIFO_R_W 0x74 00140 #define MPU9150_RA_WHO_AM_I 0x75 00141 00142 #define MPU9150_TC_PWR_MODE_BIT 7 00143 #define MPU9150_TC_OFFSET_BIT 6 00144 #define MPU9150_TC_OFFSET_LENGTH 6 00145 #define MPU9150_TC_OTP_BNK_VLD_BIT 0 00146 00147 #define MPU9150_VDDIO_LEVEL_VLOGIC 0 00148 #define MPU9150_VDDIO_LEVEL_VDD 1 00149 00150 #define MPU9150_CFG_EXT_SYNC_SET_BIT 5 00151 #define MPU9150_CFG_EXT_SYNC_SET_LENGTH 3 00152 #define MPU9150_CFG_DLPF_CFG_BIT 2 00153 #define MPU9150_CFG_DLPF_CFG_LENGTH 3 00154 00155 #define MPU9150_EXT_SYNC_DISABLED 0x0 00156 #define MPU9150_EXT_SYNC_TEMP_OUT_L 0x1 00157 #define MPU9150_EXT_SYNC_GYRO_XOUT_L 0x2 00158 #define MPU9150_EXT_SYNC_GYRO_YOUT_L 0x3 00159 #define MPU9150_EXT_SYNC_GYRO_ZOUT_L 0x4 00160 #define MPU9150_EXT_SYNC_ACCEL_XOUT_L 0x5 00161 #define MPU9150_EXT_SYNC_ACCEL_YOUT_L 0x6 00162 #define MPU9150_EXT_SYNC_ACCEL_ZOUT_L 0x7 00163 00164 #define MPU9150_DLPF_BW_256 0x00 00165 #define MPU9150_DLPF_BW_188 0x01 00166 #define MPU9150_DLPF_BW_98 0x02 00167 #define MPU9150_DLPF_BW_42 0x03 00168 #define MPU9150_DLPF_BW_20 0x04 00169 #define MPU9150_DLPF_BW_10 0x05 00170 #define MPU9150_DLPF_BW_5 0x06 00171 00172 #define MPU9150_GCONFIG_FS_SEL_BIT 4 00173 #define MPU9150_GCONFIG_FS_SEL_LENGTH 2 00174 00175 #define MPU9150_GYRO_FS_250 0x00 00176 #define MPU9150_GYRO_FS_500 0x01 00177 #define MPU9150_GYRO_FS_1000 0x02 00178 #define MPU9150_GYRO_FS_2000 0x03 00179 00180 #define MPU9150_ACONFIG_XA_ST_BIT 7 00181 #define MPU9150_ACONFIG_YA_ST_BIT 6 00182 #define MPU9150_ACONFIG_ZA_ST_BIT 5 00183 #define MPU9150_ACONFIG_AFS_SEL_BIT 4 00184 #define MPU9150_ACONFIG_AFS_SEL_LENGTH 2 00185 #define MPU9150_ACONFIG_ACCEL_HPF_BIT 2 00186 #define MPU9150_ACONFIG_ACCEL_HPF_LENGTH 3 00187 00188 #define MPU9150_ACCEL_FS_2 0x00 00189 #define MPU9150_ACCEL_FS_4 0x01 00190 #define MPU9150_ACCEL_FS_8 0x02 00191 #define MPU9150_ACCEL_FS_16 0x03 00192 00193 #define MPU9150_DHPF_RESET 0x00 00194 #define MPU9150_DHPF_5 0x01 00195 #define MPU9150_DHPF_2P5 0x02 00196 #define MPU9150_DHPF_1P25 0x03 00197 #define MPU9150_DHPF_0P63 0x04 00198 #define MPU9150_DHPF_HOLD 0x07 00199 00200 #define MPU9150_TEMP_FIFO_EN_BIT 7 00201 #define MPU9150_XG_FIFO_EN_BIT 6 00202 #define MPU9150_YG_FIFO_EN_BIT 5 00203 #define MPU9150_ZG_FIFO_EN_BIT 4 00204 #define MPU9150_ACCEL_FIFO_EN_BIT 3 00205 #define MPU9150_SLV2_FIFO_EN_BIT 2 00206 #define MPU9150_SLV1_FIFO_EN_BIT 1 00207 #define MPU9150_SLV0_FIFO_EN_BIT 0 00208 00209 #define MPU9150_MULT_MST_EN_BIT 7 00210 #define MPU9150_WAIT_FOR_ES_BIT 6 00211 #define MPU9150_SLV_3_FIFO_EN_BIT 5 00212 #define MPU9150_I2C_MST_P_NSR_BIT 4 00213 #define MPU9150_I2C_MST_CLK_BIT 3 00214 #define MPU9150_I2C_MST_CLK_LENGTH 4 00215 00216 #define MPU9150_CLOCK_DIV_348 0x0 00217 #define MPU9150_CLOCK_DIV_333 0x1 00218 #define MPU9150_CLOCK_DIV_320 0x2 00219 #define MPU9150_CLOCK_DIV_308 0x3 00220 #define MPU9150_CLOCK_DIV_296 0x4 00221 #define MPU9150_CLOCK_DIV_286 0x5 00222 #define MPU9150_CLOCK_DIV_276 0x6 00223 #define MPU9150_CLOCK_DIV_267 0x7 00224 #define MPU9150_CLOCK_DIV_258 0x8 00225 #define MPU9150_CLOCK_DIV_500 0x9 00226 #define MPU9150_CLOCK_DIV_471 0xA 00227 #define MPU9150_CLOCK_DIV_444 0xB 00228 #define MPU9150_CLOCK_DIV_421 0xC 00229 #define MPU9150_CLOCK_DIV_400 0xD 00230 #define MPU9150_CLOCK_DIV_381 0xE 00231 #define MPU9150_CLOCK_DIV_364 0xF 00232 00233 #define MPU9150_I2C_SLV_RW_BIT 7 00234 #define MPU9150_I2C_SLV_ADDR_BIT 6 00235 #define MPU9150_I2C_SLV_ADDR_LENGTH 7 00236 #define MPU9150_I2C_SLV_EN_BIT 7 00237 #define MPU9150_I2C_SLV_BYTE_SW_BIT 6 00238 #define MPU9150_I2C_SLV_REG_DIS_BIT 5 00239 #define MPU9150_I2C_SLV_GRP_BIT 4 00240 #define MPU9150_I2C_SLV_LEN_BIT 3 00241 #define MPU9150_I2C_SLV_LEN_LENGTH 4 00242 00243 #define MPU9150_I2C_SLV4_RW_BIT 7 00244 #define MPU9150_I2C_SLV4_ADDR_BIT 6 00245 #define MPU9150_I2C_SLV4_ADDR_LENGTH 7 00246 #define MPU9150_I2C_SLV4_EN_BIT 7 00247 #define MPU9150_I2C_SLV4_INT_EN_BIT 6 00248 #define MPU9150_I2C_SLV4_REG_DIS_BIT 5 00249 #define MPU9150_I2C_SLV4_MST_DLY_BIT 4 00250 #define MPU9150_I2C_SLV4_MST_DLY_LENGTH 5 00251 00252 #define MPU9150_MST_PASS_THROUGH_BIT 7 00253 #define MPU9150_MST_I2C_SLV4_DONE_BIT 6 00254 #define MPU9150_MST_I2C_LOST_ARB_BIT 5 00255 #define MPU9150_MST_I2C_SLV4_NACK_BIT 4 00256 #define MPU9150_MST_I2C_SLV3_NACK_BIT 3 00257 #define MPU9150_MST_I2C_SLV2_NACK_BIT 2 00258 #define MPU9150_MST_I2C_SLV1_NACK_BIT 1 00259 #define MPU9150_MST_I2C_SLV0_NACK_BIT 0 00260 00261 #define MPU9150_INTCFG_INT_LEVEL_BIT 7 00262 #define MPU9150_INTCFG_INT_OPEN_BIT 6 00263 #define MPU9150_INTCFG_LATCH_INT_EN_BIT 5 00264 #define MPU9150_INTCFG_INT_RD_CLEAR_BIT 4 00265 #define MPU9150_INTCFG_FSYNC_INT_LEVEL_BIT 3 00266 #define MPU9150_INTCFG_FSYNC_INT_EN_BIT 2 00267 #define MPU9150_INTCFG_I2C_BYPASS_EN_BIT 1 00268 #define MPU9150_INTCFG_CLKOUT_EN_BIT 0 00269 00270 #define MPU9150_INTMODE_ACTIVEHIGH 0x00 00271 #define MPU9150_INTMODE_ACTIVELOW 0x01 00272 00273 #define MPU9150_INTDRV_PUSHPULL 0x00 00274 #define MPU9150_INTDRV_OPENDRAIN 0x01 00275 00276 #define MPU9150_INTLATCH_50USPULSE 0x00 00277 #define MPU9150_INTLATCH_WAITCLEAR 0x01 00278 00279 #define MPU9150_INTCLEAR_STATUSREAD 0x00 00280 #define MPU9150_INTCLEAR_ANYREAD 0x01 00281 00282 #define MPU9150_INTERRUPT_FF_BIT 7 00283 #define MPU9150_INTERRUPT_MOT_BIT 6 00284 #define MPU9150_INTERRUPT_ZMOT_BIT 5 00285 #define MPU9150_INTERRUPT_FIFO_OFLOW_BIT 4 00286 #define MPU9150_INTERRUPT_I2C_MST_INT_BIT 3 00287 #define MPU9150_INTERRUPT_PLL_RDY_INT_BIT 2 00288 #define MPU9150_INTERRUPT_DMP_INT_BIT 1 00289 #define MPU9150_INTERRUPT_DATA_RDY_BIT 0 00290 00291 // TODO: figure out what these actually do 00292 // UMPL source code is not very obivous 00293 #define MPU9150_DMPINT_5_BIT 5 00294 #define MPU9150_DMPINT_4_BIT 4 00295 #define MPU9150_DMPINT_3_BIT 3 00296 #define MPU9150_DMPINT_2_BIT 2 00297 #define MPU9150_DMPINT_1_BIT 1 00298 #define MPU9150_DMPINT_0_BIT 0 00299 00300 #define MPU9150_MOTION_MOT_XNEG_BIT 7 00301 #define MPU9150_MOTION_MOT_XPOS_BIT 6 00302 #define MPU9150_MOTION_MOT_YNEG_BIT 5 00303 #define MPU9150_MOTION_MOT_YPOS_BIT 4 00304 #define MPU9150_MOTION_MOT_ZNEG_BIT 3 00305 #define MPU9150_MOTION_MOT_ZPOS_BIT 2 00306 #define MPU9150_MOTION_MOT_ZRMOT_BIT 0 00307 00308 #define MPU9150_DELAYCTRL_DELAY_ES_SHADOW_BIT 7 00309 #define MPU9150_DELAYCTRL_I2C_SLV4_DLY_EN_BIT 4 00310 #define MPU9150_DELAYCTRL_I2C_SLV3_DLY_EN_BIT 3 00311 #define MPU9150_DELAYCTRL_I2C_SLV2_DLY_EN_BIT 2 00312 #define MPU9150_DELAYCTRL_I2C_SLV1_DLY_EN_BIT 1 00313 #define MPU9150_DELAYCTRL_I2C_SLV0_DLY_EN_BIT 0 00314 00315 #define MPU9150_PATHRESET_GYRO_RESET_BIT 2 00316 #define MPU9150_PATHRESET_ACCEL_RESET_BIT 1 00317 #define MPU9150_PATHRESET_TEMP_RESET_BIT 0 00318 00319 #define MPU9150_DETECT_ACCEL_ON_DELAY_BIT 5 00320 #define MPU9150_DETECT_ACCEL_ON_DELAY_LENGTH 2 00321 #define MPU9150_DETECT_FF_COUNT_BIT 3 00322 #define MPU9150_DETECT_FF_COUNT_LENGTH 2 00323 #define MPU9150_DETECT_MOT_COUNT_BIT 1 00324 #define MPU9150_DETECT_MOT_COUNT_LENGTH 2 00325 00326 #define MPU9150_DETECT_DECREMENT_RESET 0x0 00327 #define MPU9150_DETECT_DECREMENT_1 0x1 00328 #define MPU9150_DETECT_DECREMENT_2 0x2 00329 #define MPU9150_DETECT_DECREMENT_4 0x3 00330 00331 #define MPU9150_USERCTRL_DMP_EN_BIT 7 00332 #define MPU9150_USERCTRL_FIFO_EN_BIT 6 00333 #define MPU9150_USERCTRL_I2C_MST_EN_BIT 5 00334 #define MPU9150_USERCTRL_I2C_IF_DIS_BIT 4 00335 #define MPU9150_USERCTRL_DMP_RESET_BIT 3 00336 #define MPU9150_USERCTRL_FIFO_RESET_BIT 2 00337 #define MPU9150_USERCTRL_I2C_MST_RESET_BIT 1 00338 #define MPU9150_USERCTRL_SIG_COND_RESET_BIT 0 00339 00340 #define MPU9150_PWR1_DEVICE_RESET_BIT 7 00341 #define MPU9150_PWR1_SLEEP_BIT 6 00342 #define MPU9150_PWR1_CYCLE_BIT 5 00343 #define MPU9150_PWR1_TEMP_DIS_BIT 3 00344 #define MPU9150_PWR1_CLKSEL_BIT 2 00345 #define MPU9150_PWR1_CLKSEL_LENGTH 3 00346 00347 #define MPU9150_CLOCK_INTERNAL 0x00 00348 #define MPU9150_CLOCK_PLL_XGYRO 0x01 00349 #define MPU9150_CLOCK_PLL_YGYRO 0x02 00350 #define MPU9150_CLOCK_PLL_ZGYRO 0x03 00351 #define MPU9150_CLOCK_PLL_EXT32K 0x04 00352 #define MPU9150_CLOCK_PLL_EXT19M 0x05 00353 #define MPU9150_CLOCK_KEEP_RESET 0x07 00354 00355 #define MPU9150_PWR2_LP_WAKE_CTRL_BIT 7 00356 #define MPU9150_PWR2_LP_WAKE_CTRL_LENGTH 2 00357 #define MPU9150_PWR2_STBY_XA_BIT 5 00358 #define MPU9150_PWR2_STBY_YA_BIT 4 00359 #define MPU9150_PWR2_STBY_ZA_BIT 3 00360 #define MPU9150_PWR2_STBY_XG_BIT 2 00361 #define MPU9150_PWR2_STBY_YG_BIT 1 00362 #define MPU9150_PWR2_STBY_ZG_BIT 0 00363 00364 #define MPU9150_WAKE_FREQ_1P25 0x0 00365 #define MPU9150_WAKE_FREQ_2P5 0x1 00366 #define MPU9150_WAKE_FREQ_5 0x2 00367 #define MPU9150_WAKE_FREQ_10 0x3 00368 00369 #define MPU9150_BANKSEL_PRFTCH_EN_BIT 6 00370 #define MPU9150_BANKSEL_CFG_USER_BANK_BIT 5 00371 #define MPU9150_BANKSEL_MEM_SEL_BIT 4 00372 #define MPU9150_BANKSEL_MEM_SEL_LENGTH 5 00373 00374 #define MPU9150_WHO_AM_I_BIT 6 00375 #define MPU9150_WHO_AM_I_LENGTH 6 00376 00377 #define MPU9150_DMP_MEMORY_BANKS 8 00378 #define MPU9150_DMP_MEMORY_BANK_SIZE 256 00379 #define MPU9150_DMP_MEMORY_CHUNK_SIZE 16 00380 00381 // note: DMP code memory blocks defined at end of header file 00382 00383 class MPU9150 { 00384 public: 00385 MPU9150(); 00386 MPU9150(uint8_t address); 00387 00388 void initialize(); 00389 bool testConnection(); 00390 00391 // AUX_VDDIO register 00392 uint8_t getAuxVDDIOLevel(); 00393 void setAuxVDDIOLevel(uint8_t level); 00394 00395 // SMPLRT_DIV register 00396 uint8_t getRate(); 00397 void setRate(uint8_t rate); 00398 00399 // CONFIG register 00400 uint8_t getExternalFrameSync(); 00401 void setExternalFrameSync(uint8_t sync); 00402 uint8_t getDLPFMode(); 00403 void setDLPFMode(uint8_t bandwidth); 00404 00405 // GYRO_CONFIG register 00406 uint8_t getFullScaleGyroRange(); 00407 void setFullScaleGyroRange(uint8_t range); 00408 00409 // ACCEL_CONFIG register 00410 bool getAccelXSelfTest(); 00411 void setAccelXSelfTest(bool enabled); 00412 bool getAccelYSelfTest(); 00413 void setAccelYSelfTest(bool enabled); 00414 bool getAccelZSelfTest(); 00415 void setAccelZSelfTest(bool enabled); 00416 uint8_t getFullScaleAccelRange(); 00417 void setFullScaleAccelRange(uint8_t range); 00418 uint8_t getDHPFMode(); 00419 void setDHPFMode(uint8_t mode); 00420 00421 // FF_THR register 00422 uint8_t getFreefallDetectionThreshold(); 00423 void setFreefallDetectionThreshold(uint8_t threshold); 00424 00425 // FF_DUR register 00426 uint8_t getFreefallDetectionDuration(); 00427 void setFreefallDetectionDuration(uint8_t duration); 00428 00429 // MOT_THR register 00430 uint8_t getMotionDetectionThreshold(); 00431 void setMotionDetectionThreshold(uint8_t threshold); 00432 00433 // MOT_DUR register 00434 uint8_t getMotionDetectionDuration(); 00435 void setMotionDetectionDuration(uint8_t duration); 00436 00437 // ZRMOT_THR register 00438 uint8_t getZeroMotionDetectionThreshold(); 00439 void setZeroMotionDetectionThreshold(uint8_t threshold); 00440 00441 // ZRMOT_DUR register 00442 uint8_t getZeroMotionDetectionDuration(); 00443 void setZeroMotionDetectionDuration(uint8_t duration); 00444 00445 // FIFO_EN register 00446 bool getTempFIFOEnabled(); 00447 void setTempFIFOEnabled(bool enabled); 00448 bool getXGyroFIFOEnabled(); 00449 void setXGyroFIFOEnabled(bool enabled); 00450 bool getYGyroFIFOEnabled(); 00451 void setYGyroFIFOEnabled(bool enabled); 00452 bool getZGyroFIFOEnabled(); 00453 void setZGyroFIFOEnabled(bool enabled); 00454 bool getAccelFIFOEnabled(); 00455 void setAccelFIFOEnabled(bool enabled); 00456 bool getSlave2FIFOEnabled(); 00457 void setSlave2FIFOEnabled(bool enabled); 00458 bool getSlave1FIFOEnabled(); 00459 void setSlave1FIFOEnabled(bool enabled); 00460 bool getSlave0FIFOEnabled(); 00461 void setSlave0FIFOEnabled(bool enabled); 00462 00463 // I2C_MST_CTRL register 00464 bool getMultiMasterEnabled(); 00465 void setMultiMasterEnabled(bool enabled); 00466 bool getWaitForExternalSensorEnabled(); 00467 void setWaitForExternalSensorEnabled(bool enabled); 00468 bool getSlave3FIFOEnabled(); 00469 void setSlave3FIFOEnabled(bool enabled); 00470 bool getSlaveReadWriteTransitionEnabled(); 00471 void setSlaveReadWriteTransitionEnabled(bool enabled); 00472 uint8_t getMasterClockSpeed(); 00473 void setMasterClockSpeed(uint8_t speed); 00474 00475 // I2C_SLV* registers (Slave 0-3) 00476 uint8_t getSlaveAddress(uint8_t num); 00477 void setSlaveAddress(uint8_t num, uint8_t address); 00478 uint8_t getSlaveRegister(uint8_t num); 00479 void setSlaveRegister(uint8_t num, uint8_t reg); 00480 bool getSlaveEnabled(uint8_t num); 00481 void setSlaveEnabled(uint8_t num, bool enabled); 00482 bool getSlaveWordByteSwap(uint8_t num); 00483 void setSlaveWordByteSwap(uint8_t num, bool enabled); 00484 bool getSlaveWriteMode(uint8_t num); 00485 void setSlaveWriteMode(uint8_t num, bool mode); 00486 bool getSlaveWordGroupOffset(uint8_t num); 00487 void setSlaveWordGroupOffset(uint8_t num, bool enabled); 00488 uint8_t getSlaveDataLength(uint8_t num); 00489 void setSlaveDataLength(uint8_t num, uint8_t length); 00490 00491 // I2C_SLV* registers (Slave 4) 00492 uint8_t getSlave4Address(); 00493 void setSlave4Address(uint8_t address); 00494 uint8_t getSlave4Register(); 00495 void setSlave4Register(uint8_t reg); 00496 void setSlave4OutputByte(uint8_t data); 00497 bool getSlave4Enabled(); 00498 void setSlave4Enabled(bool enabled); 00499 bool getSlave4InterruptEnabled(); 00500 void setSlave4InterruptEnabled(bool enabled); 00501 bool getSlave4WriteMode(); 00502 void setSlave4WriteMode(bool mode); 00503 uint8_t getSlave4MasterDelay(); 00504 void setSlave4MasterDelay(uint8_t delay); 00505 uint8_t getSlate4InputByte(); 00506 00507 // I2C_MST_STATUS register 00508 bool getPassthroughStatus(); 00509 bool getSlave4IsDone(); 00510 bool getLostArbitration(); 00511 bool getSlave4Nack(); 00512 bool getSlave3Nack(); 00513 bool getSlave2Nack(); 00514 bool getSlave1Nack(); 00515 bool getSlave0Nack(); 00516 00517 // INT_PIN_CFG register 00518 bool getInterruptMode(); 00519 void setInterruptMode(bool mode); 00520 bool getInterruptDrive(); 00521 void setInterruptDrive(bool drive); 00522 bool getInterruptLatch(); 00523 void setInterruptLatch(bool latch); 00524 bool getInterruptLatchClear(); 00525 void setInterruptLatchClear(bool clear); 00526 bool getFSyncInterruptLevel(); 00527 void setFSyncInterruptLevel(bool level); 00528 bool getFSyncInterruptEnabled(); 00529 void setFSyncInterruptEnabled(bool enabled); 00530 bool getI2CBypassEnabled(); 00531 void setI2CBypassEnabled(bool enabled); 00532 bool getClockOutputEnabled(); 00533 void setClockOutputEnabled(bool enabled); 00534 00535 // INT_ENABLE register 00536 uint8_t getIntEnabled(); 00537 void setIntEnabled(uint8_t enabled); 00538 bool getIntFreefallEnabled(); 00539 void setIntFreefallEnabled(bool enabled); 00540 bool getIntMotionEnabled(); 00541 void setIntMotionEnabled(bool enabled); 00542 bool getIntZeroMotionEnabled(); 00543 void setIntZeroMotionEnabled(bool enabled); 00544 bool getIntFIFOBufferOverflowEnabled(); 00545 void setIntFIFOBufferOverflowEnabled(bool enabled); 00546 bool getIntI2CMasterEnabled(); 00547 void setIntI2CMasterEnabled(bool enabled); 00548 bool getIntDataReadyEnabled(); 00549 void setIntDataReadyEnabled(bool enabled); 00550 00551 // INT_STATUS register 00552 uint8_t getIntStatus(); 00553 bool getIntFreefallStatus(); 00554 bool getIntMotionStatus(); 00555 bool getIntZeroMotionStatus(); 00556 bool getIntFIFOBufferOverflowStatus(); 00557 bool getIntI2CMasterStatus(); 00558 bool getIntDataReadyStatus(); 00559 00560 // ACCEL_*OUT_* registers 00561 void getMotion9(int16_t* ax, int16_t* ay, int16_t* az, int16_t* gx, int16_t* gy, int16_t* gz, int16_t* mx, int16_t* my, int16_t* mz); 00562 void getMotion6(int16_t* ax, int16_t* ay, int16_t* az, int16_t* gx, int16_t* gy, int16_t* gz); 00563 void getAcceleration(int16_t* x, int16_t* y, int16_t* z); 00564 int16_t getAccelerationX(); 00565 int16_t getAccelerationY(); 00566 int16_t getAccelerationZ(); 00567 00568 // TEMP_OUT_* registers 00569 int16_t getTemperature(); 00570 00571 // GYRO_*OUT_* registers 00572 void getRotation(int16_t* x, int16_t* y, int16_t* z); 00573 int16_t getRotationX(); 00574 int16_t getRotationY(); 00575 int16_t getRotationZ(); 00576 00577 // EXT_SENS_DATA_* registers 00578 uint8_t getExternalSensorByte(int position); 00579 uint16_t getExternalSensorWord(int position); 00580 uint32_t getExternalSensorDWord(int position); 00581 00582 // MOT_DETECT_STATUS register 00583 bool getXNegMotionDetected(); 00584 bool getXPosMotionDetected(); 00585 bool getYNegMotionDetected(); 00586 bool getYPosMotionDetected(); 00587 bool getZNegMotionDetected(); 00588 bool getZPosMotionDetected(); 00589 bool getZeroMotionDetected(); 00590 00591 // I2C_SLV*_DO register 00592 void setSlaveOutputByte(uint8_t num, uint8_t data); 00593 00594 // I2C_MST_DELAY_CTRL register 00595 bool getExternalShadowDelayEnabled(); 00596 void setExternalShadowDelayEnabled(bool enabled); 00597 bool getSlaveDelayEnabled(uint8_t num); 00598 void setSlaveDelayEnabled(uint8_t num, bool enabled); 00599 00600 // SIGNAL_PATH_RESET register 00601 void resetGyroscopePath(); 00602 void resetAccelerometerPath(); 00603 void resetTemperaturePath(); 00604 00605 // MOT_DETECT_CTRL register 00606 uint8_t getAccelerometerPowerOnDelay(); 00607 void setAccelerometerPowerOnDelay(uint8_t delay); 00608 uint8_t getFreefallDetectionCounterDecrement(); 00609 void setFreefallDetectionCounterDecrement(uint8_t decrement); 00610 uint8_t getMotionDetectionCounterDecrement(); 00611 void setMotionDetectionCounterDecrement(uint8_t decrement); 00612 00613 // USER_CTRL register 00614 bool getFIFOEnabled(); 00615 void setFIFOEnabled(bool enabled); 00616 bool getI2CMasterModeEnabled(); 00617 void setI2CMasterModeEnabled(bool enabled); 00618 void switchSPIEnabled(bool enabled); 00619 void resetFIFO(); 00620 void resetI2CMaster(); 00621 void resetSensors(); 00622 00623 // PWR_MGMT_1 register 00624 void reset(); 00625 bool getSleepEnabled(); 00626 void setSleepEnabled(bool enabled); 00627 bool getWakeCycleEnabled(); 00628 void setWakeCycleEnabled(bool enabled); 00629 bool getTempSensorEnabled(); 00630 void setTempSensorEnabled(bool enabled); 00631 uint8_t getClockSource(); 00632 void setClockSource(uint8_t source); 00633 00634 // PWR_MGMT_2 register 00635 uint8_t getWakeFrequency(); 00636 void setWakeFrequency(uint8_t frequency); 00637 bool getStandbyXAccelEnabled(); 00638 void setStandbyXAccelEnabled(bool enabled); 00639 bool getStandbyYAccelEnabled(); 00640 void setStandbyYAccelEnabled(bool enabled); 00641 bool getStandbyZAccelEnabled(); 00642 void setStandbyZAccelEnabled(bool enabled); 00643 bool getStandbyXGyroEnabled(); 00644 void setStandbyXGyroEnabled(bool enabled); 00645 bool getStandbyYGyroEnabled(); 00646 void setStandbyYGyroEnabled(bool enabled); 00647 bool getStandbyZGyroEnabled(); 00648 void setStandbyZGyroEnabled(bool enabled); 00649 00650 // FIFO_COUNT_* registers 00651 uint16_t getFIFOCount(); 00652 00653 // FIFO_R_W register 00654 uint8_t getFIFOByte(); 00655 void setFIFOByte(uint8_t data); 00656 void getFIFOBytes(uint8_t *data, uint8_t length); 00657 00658 // WHO_AM_I register 00659 uint8_t getDeviceID(); 00660 void setDeviceID(uint8_t id); 00661 00662 // ======== UNDOCUMENTED/DMP REGISTERS/METHODS ======== 00663 00664 // XG_OFFS_TC register 00665 uint8_t getOTPBankValid(); 00666 void setOTPBankValid(bool enabled); 00667 int8_t getXGyroOffsetTC(); 00668 void setXGyroOffsetTC(int8_t offset); 00669 00670 // YG_OFFS_TC register 00671 int8_t getYGyroOffsetTC(); 00672 void setYGyroOffsetTC(int8_t offset); 00673 00674 // ZG_OFFS_TC register 00675 int8_t getZGyroOffsetTC(); 00676 void setZGyroOffsetTC(int8_t offset); 00677 00678 // X_FINE_GAIN register 00679 int8_t getXFineGain(); 00680 void setXFineGain(int8_t gain); 00681 00682 // Y_FINE_GAIN register 00683 int8_t getYFineGain(); 00684 void setYFineGain(int8_t gain); 00685 00686 // Z_FINE_GAIN register 00687 int8_t getZFineGain(); 00688 void setZFineGain(int8_t gain); 00689 00690 // XA_OFFS_* registers 00691 int16_t getXAccelOffset(); 00692 void setXAccelOffset(int16_t offset); 00693 00694 // YA_OFFS_* register 00695 int16_t getYAccelOffset(); 00696 void setYAccelOffset(int16_t offset); 00697 00698 // ZA_OFFS_* register 00699 int16_t getZAccelOffset(); 00700 void setZAccelOffset(int16_t offset); 00701 00702 // XG_OFFS_USR* registers 00703 int16_t getXGyroOffset(); 00704 void setXGyroOffset(int16_t offset); 00705 00706 // YG_OFFS_USR* register 00707 int16_t getYGyroOffset(); 00708 void setYGyroOffset(int16_t offset); 00709 00710 // ZG_OFFS_USR* register 00711 int16_t getZGyroOffset(); 00712 void setZGyroOffset(int16_t offset); 00713 00714 // INT_ENABLE register (DMP functions) 00715 bool getIntPLLReadyEnabled(); 00716 void setIntPLLReadyEnabled(bool enabled); 00717 bool getIntDMPEnabled(); 00718 void setIntDMPEnabled(bool enabled); 00719 00720 // DMP_INT_STATUS 00721 bool getDMPInt5Status(); 00722 bool getDMPInt4Status(); 00723 bool getDMPInt3Status(); 00724 bool getDMPInt2Status(); 00725 bool getDMPInt1Status(); 00726 bool getDMPInt0Status(); 00727 00728 // INT_STATUS register (DMP functions) 00729 bool getIntPLLReadyStatus(); 00730 bool getIntDMPStatus(); 00731 00732 // USER_CTRL register (DMP functions) 00733 bool getDMPEnabled(); 00734 void setDMPEnabled(bool enabled); 00735 void resetDMP(); 00736 00737 // BANK_SEL register 00738 void setMemoryBank(uint8_t bank, bool prefetchEnabled=false, bool userBank=false); 00739 00740 // MEM_START_ADDR register 00741 void setMemoryStartAddress(uint8_t address); 00742 00743 // MEM_R_W register 00744 uint8_t readMemoryByte(); 00745 void writeMemoryByte(uint8_t data); 00746 void readMemoryBlock(uint8_t *data, uint16_t dataSize, uint8_t bank=0, uint8_t address=0); 00747 bool writeMemoryBlock(const uint8_t *data, uint16_t dataSize, uint8_t bank=0, uint8_t address=0, bool verify=true, bool useProgMem=false); 00748 bool writeProgMemoryBlock(const uint8_t *data, uint16_t dataSize, uint8_t bank=0, uint8_t address=0, bool verify=true); 00749 00750 bool writeDMPConfigurationSet(const uint8_t *data, uint16_t dataSize, bool useProgMem=false); 00751 bool writeProgDMPConfigurationSet(const uint8_t *data, uint16_t dataSize); 00752 00753 // DMP_CFG_1 register 00754 uint8_t getDMPConfig1(); 00755 void setDMPConfig1(uint8_t config); 00756 00757 // DMP_CFG_2 register 00758 uint8_t getDMPConfig2(); 00759 void setDMPConfig2(uint8_t config); 00760 00761 // special methods for MotionApps 2.0 implementation 00762 #ifdef MPU9150_INCLUDE_DMP_MOTIONAPPS20 00763 uint8_t *dmpPacketBuffer; 00764 uint16_t dmpPacketSize; 00765 00766 uint8_t dmpInitialize(); 00767 bool dmpPacketAvailable(); 00768 00769 uint8_t dmpSetFIFORate(uint8_t fifoRate); 00770 uint8_t dmpGetFIFORate(); 00771 uint8_t dmpGetSampleStepSizeMS(); 00772 uint8_t dmpGetSampleFrequency(); 00773 int32_t dmpDecodeTemperature(int8_t tempReg); 00774 00775 // Register callbacks after a packet of FIFO data is processed 00776 //uint8_t dmpRegisterFIFORateProcess(inv_obj_func func, int16_t priority); 00777 //uint8_t dmpUnregisterFIFORateProcess(inv_obj_func func); 00778 uint8_t dmpRunFIFORateProcesses(); 00779 00780 // Setup FIFO for various output 00781 uint8_t dmpSendQuaternion(uint_fast16_t accuracy); 00782 uint8_t dmpSendGyro(uint_fast16_t elements, uint_fast16_t accuracy); 00783 uint8_t dmpSendAccel(uint_fast16_t elements, uint_fast16_t accuracy); 00784 uint8_t dmpSendLinearAccel(uint_fast16_t elements, uint_fast16_t accuracy); 00785 uint8_t dmpSendLinearAccelInWorld(uint_fast16_t elements, uint_fast16_t accuracy); 00786 uint8_t dmpSendControlData(uint_fast16_t elements, uint_fast16_t accuracy); 00787 uint8_t dmpSendSensorData(uint_fast16_t elements, uint_fast16_t accuracy); 00788 uint8_t dmpSendExternalSensorData(uint_fast16_t elements, uint_fast16_t accuracy); 00789 uint8_t dmpSendGravity(uint_fast16_t elements, uint_fast16_t accuracy); 00790 uint8_t dmpSendPacketNumber(uint_fast16_t accuracy); 00791 uint8_t dmpSendQuantizedAccel(uint_fast16_t elements, uint_fast16_t accuracy); 00792 uint8_t dmpSendEIS(uint_fast16_t elements, uint_fast16_t accuracy); 00793 00794 // Get Fixed Point data from FIFO 00795 uint8_t dmpGetAccel(int32_t *data, const uint8_t* packet=0); 00796 uint8_t dmpGetAccel(int16_t *data, const uint8_t* packet=0); 00797 uint8_t dmpGetAccel(VectorInt16 *v, const uint8_t* packet=0); 00798 uint8_t dmpGetQuaternion(int32_t *data, const uint8_t* packet=0); 00799 uint8_t dmpGetQuaternion(int16_t *data, const uint8_t* packet=0); 00800 uint8_t dmpGetQuaternion(Quaternion *q, const uint8_t* packet=0); 00801 uint8_t dmpGet6AxisQuaternion(int32_t *data, const uint8_t* packet=0); 00802 uint8_t dmpGet6AxisQuaternion(int16_t *data, const uint8_t* packet=0); 00803 uint8_t dmpGet6AxisQuaternion(Quaternion *q, const uint8_t* packet=0); 00804 uint8_t dmpGetRelativeQuaternion(int32_t *data, const uint8_t* packet=0); 00805 uint8_t dmpGetRelativeQuaternion(int16_t *data, const uint8_t* packet=0); 00806 uint8_t dmpGetRelativeQuaternion(Quaternion *data, const uint8_t* packet=0); 00807 uint8_t dmpGetGyro(int32_t *data, const uint8_t* packet=0); 00808 uint8_t dmpGetGyro(int16_t *data, const uint8_t* packet=0); 00809 uint8_t dmpGetGyro(VectorInt16 *v, const uint8_t* packet=0); 00810 uint8_t dmpSetLinearAccelFilterCoefficient(float coef); 00811 uint8_t dmpGetLinearAccel(int32_t *data, const uint8_t* packet=0); 00812 uint8_t dmpGetLinearAccel(int16_t *data, const uint8_t* packet=0); 00813 uint8_t dmpGetLinearAccel(VectorInt16 *v, const uint8_t* packet=0); 00814 uint8_t dmpGetLinearAccel(VectorInt16 *v, VectorInt16 *vRaw, VectorFloat *gravity); 00815 uint8_t dmpGetLinearAccelInWorld(int32_t *data, const uint8_t* packet=0); 00816 uint8_t dmpGetLinearAccelInWorld(int16_t *data, const uint8_t* packet=0); 00817 uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, const uint8_t* packet=0); 00818 uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, VectorInt16 *vReal, Quaternion *q); 00819 uint8_t dmpGetGyroAndAccelSensor(int32_t *data, const uint8_t* packet=0); 00820 uint8_t dmpGetGyroAndAccelSensor(int16_t *data, const uint8_t* packet=0); 00821 uint8_t dmpGetGyroAndAccelSensor(VectorInt16 *g, VectorInt16 *a, const uint8_t* packet=0); 00822 uint8_t dmpGetGyroSensor(int32_t *data, const uint8_t* packet=0); 00823 uint8_t dmpGetGyroSensor(int16_t *data, const uint8_t* packet=0); 00824 uint8_t dmpGetGyroSensor(VectorInt16 *v, const uint8_t* packet=0); 00825 uint8_t dmpGetControlData(int32_t *data, const uint8_t* packet=0); 00826 uint8_t dmpGetTemperature(int32_t *data, const uint8_t* packet=0); 00827 uint8_t dmpGetGravity(int32_t *data, const uint8_t* packet=0); 00828 uint8_t dmpGetGravity(int16_t *data, const uint8_t* packet=0); 00829 uint8_t dmpGetGravity(VectorInt16 *v, const uint8_t* packet=0); 00830 uint8_t dmpGetGravity(VectorFloat *v, Quaternion *q); 00831 uint8_t dmpGetUnquantizedAccel(int32_t *data, const uint8_t* packet=0); 00832 uint8_t dmpGetUnquantizedAccel(int16_t *data, const uint8_t* packet=0); 00833 uint8_t dmpGetUnquantizedAccel(VectorInt16 *v, const uint8_t* packet=0); 00834 uint8_t dmpGetQuantizedAccel(int32_t *data, const uint8_t* packet=0); 00835 uint8_t dmpGetQuantizedAccel(int16_t *data, const uint8_t* packet=0); 00836 uint8_t dmpGetQuantizedAccel(VectorInt16 *v, const uint8_t* packet=0); 00837 uint8_t dmpGetExternalSensorData(int32_t *data, uint16_t size, const uint8_t* packet=0); 00838 uint8_t dmpGetEIS(int32_t *data, const uint8_t* packet=0); 00839 00840 uint8_t dmpGetEuler(float *data, Quaternion *q); 00841 uint8_t dmpGetYawPitchRoll(float *data, Quaternion *q, VectorFloat *gravity); 00842 00843 // Get Floating Point data from FIFO 00844 uint8_t dmpGetAccelFloat(float *data, const uint8_t* packet=0); 00845 uint8_t dmpGetQuaternionFloat(float *data, const uint8_t* packet=0); 00846 00847 uint8_t dmpProcessFIFOPacket(const unsigned char *dmpData); 00848 uint8_t dmpReadAndProcessFIFOPacket(uint8_t numPackets, uint8_t *processed=NULL); 00849 00850 uint8_t dmpSetFIFOProcessedCallback(void (*func) (void)); 00851 00852 uint8_t dmpInitFIFOParam(); 00853 uint8_t dmpCloseFIFO(); 00854 uint8_t dmpSetGyroDataSource(uint8_t source); 00855 uint8_t dmpDecodeQuantizedAccel(); 00856 uint32_t dmpGetGyroSumOfSquare(); 00857 uint32_t dmpGetAccelSumOfSquare(); 00858 void dmpOverrideQuaternion(long *q); 00859 uint16_t dmpGetFIFOPacketSize(); 00860 #endif 00861 00862 // special methods for MotionApps 4.1 implementation 00863 #ifdef MPU9150_INCLUDE_DMP_MOTIONAPPS41 00864 uint8_t *dmpPacketBuffer; 00865 uint16_t dmpPacketSize; 00866 00867 uint8_t dmpInitialize(); 00868 bool dmpPacketAvailable(); 00869 00870 uint8_t dmpSetFIFORate(uint8_t fifoRate); 00871 uint8_t dmpGetFIFORate(); 00872 uint8_t dmpGetSampleStepSizeMS(); 00873 uint8_t dmpGetSampleFrequency(); 00874 int32_t dmpDecodeTemperature(int8_t tempReg); 00875 00876 // Register callbacks after a packet of FIFO data is processed 00877 //uint8_t dmpRegisterFIFORateProcess(inv_obj_func func, int16_t priority); 00878 //uint8_t dmpUnregisterFIFORateProcess(inv_obj_func func); 00879 uint8_t dmpRunFIFORateProcesses(); 00880 00881 // Setup FIFO for various output 00882 uint8_t dmpSendQuaternion(uint_fast16_t accuracy); 00883 uint8_t dmpSendGyro(uint_fast16_t elements, uint_fast16_t accuracy); 00884 uint8_t dmpSendAccel(uint_fast16_t elements, uint_fast16_t accuracy); 00885 uint8_t dmpSendLinearAccel(uint_fast16_t elements, uint_fast16_t accuracy); 00886 uint8_t dmpSendLinearAccelInWorld(uint_fast16_t elements, uint_fast16_t accuracy); 00887 uint8_t dmpSendControlData(uint_fast16_t elements, uint_fast16_t accuracy); 00888 uint8_t dmpSendSensorData(uint_fast16_t elements, uint_fast16_t accuracy); 00889 uint8_t dmpSendExternalSensorData(uint_fast16_t elements, uint_fast16_t accuracy); 00890 uint8_t dmpSendGravity(uint_fast16_t elements, uint_fast16_t accuracy); 00891 uint8_t dmpSendPacketNumber(uint_fast16_t accuracy); 00892 uint8_t dmpSendQuantizedAccel(uint_fast16_t elements, uint_fast16_t accuracy); 00893 uint8_t dmpSendEIS(uint_fast16_t elements, uint_fast16_t accuracy); 00894 00895 // Get Fixed Point data from FIFO 00896 uint8_t dmpGetAccel(int32_t *data, const uint8_t* packet=0); 00897 uint8_t dmpGetAccel(int16_t *data, const uint8_t* packet=0); 00898 uint8_t dmpGetAccel(VectorInt16 *v, const uint8_t* packet=0); 00899 uint8_t dmpGetQuaternion(int32_t *data, const uint8_t* packet=0); 00900 uint8_t dmpGetQuaternion(int16_t *data, const uint8_t* packet=0); 00901 uint8_t dmpGetQuaternion(Quaternion *q, const uint8_t* packet=0); 00902 uint8_t dmpGet6AxisQuaternion(int32_t *data, const uint8_t* packet=0); 00903 uint8_t dmpGet6AxisQuaternion(int16_t *data, const uint8_t* packet=0); 00904 uint8_t dmpGet6AxisQuaternion(Quaternion *q, const uint8_t* packet=0); 00905 uint8_t dmpGetRelativeQuaternion(int32_t *data, const uint8_t* packet=0); 00906 uint8_t dmpGetRelativeQuaternion(int16_t *data, const uint8_t* packet=0); 00907 uint8_t dmpGetRelativeQuaternion(Quaternion *data, const uint8_t* packet=0); 00908 uint8_t dmpGetGyro(int32_t *data, const uint8_t* packet=0); 00909 uint8_t dmpGetGyro(int16_t *data, const uint8_t* packet=0); 00910 uint8_t dmpGetGyro(VectorInt16 *v, const uint8_t* packet=0); 00911 uint8_t dmpGetMag(int16_t *data, const uint8_t* packet=0); 00912 uint8_t dmpSetLinearAccelFilterCoefficient(float coef); 00913 uint8_t dmpGetLinearAccel(int32_t *data, const uint8_t* packet=0); 00914 uint8_t dmpGetLinearAccel(int16_t *data, const uint8_t* packet=0); 00915 uint8_t dmpGetLinearAccel(VectorInt16 *v, const uint8_t* packet=0); 00916 uint8_t dmpGetLinearAccel(VectorInt16 *v, VectorInt16 *vRaw, VectorFloat *gravity); 00917 uint8_t dmpGetLinearAccelInWorld(int32_t *data, const uint8_t* packet=0); 00918 uint8_t dmpGetLinearAccelInWorld(int16_t *data, const uint8_t* packet=0); 00919 uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, const uint8_t* packet=0); 00920 uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, VectorInt16 *vReal, Quaternion *q); 00921 uint8_t dmpGetGyroAndAccelSensor(int32_t *data, const uint8_t* packet=0); 00922 uint8_t dmpGetGyroAndAccelSensor(int16_t *data, const uint8_t* packet=0); 00923 uint8_t dmpGetGyroAndAccelSensor(VectorInt16 *g, VectorInt16 *a, const uint8_t* packet=0); 00924 uint8_t dmpGetGyroSensor(int32_t *data, const uint8_t* packet=0); 00925 uint8_t dmpGetGyroSensor(int16_t *data, const uint8_t* packet=0); 00926 uint8_t dmpGetGyroSensor(VectorInt16 *v, const uint8_t* packet=0); 00927 uint8_t dmpGetControlData(int32_t *data, const uint8_t* packet=0); 00928 uint8_t dmpGetTemperature(int32_t *data, const uint8_t* packet=0); 00929 uint8_t dmpGetGravity(int32_t *data, const uint8_t* packet=0); 00930 uint8_t dmpGetGravity(int16_t *data, const uint8_t* packet=0); 00931 uint8_t dmpGetGravity(VectorInt16 *v, const uint8_t* packet=0); 00932 uint8_t dmpGetGravity(VectorFloat *v, Quaternion *q); 00933 uint8_t dmpGetUnquantizedAccel(int32_t *data, const uint8_t* packet=0); 00934 uint8_t dmpGetUnquantizedAccel(int16_t *data, const uint8_t* packet=0); 00935 uint8_t dmpGetUnquantizedAccel(VectorInt16 *v, const uint8_t* packet=0); 00936 uint8_t dmpGetQuantizedAccel(int32_t *data, const uint8_t* packet=0); 00937 uint8_t dmpGetQuantizedAccel(int16_t *data, const uint8_t* packet=0); 00938 uint8_t dmpGetQuantizedAccel(VectorInt16 *v, const uint8_t* packet=0); 00939 uint8_t dmpGetExternalSensorData(int32_t *data, uint16_t size, const uint8_t* packet=0); 00940 uint8_t dmpGetEIS(int32_t *data, const uint8_t* packet=0); 00941 00942 uint8_t dmpGetEuler(float *data, Quaternion *q); 00943 uint8_t dmpGetYawPitchRoll(float *data, Quaternion *q, VectorFloat *gravity); 00944 00945 // Get Floating Point data from FIFO 00946 uint8_t dmpGetAccelFloat(float *data, const uint8_t* packet=0); 00947 uint8_t dmpGetQuaternionFloat(float *data, const uint8_t* packet=0); 00948 00949 uint8_t dmpProcessFIFOPacket(const unsigned char *dmpData); 00950 uint8_t dmpReadAndProcessFIFOPacket(uint8_t numPackets, uint8_t *processed=NULL); 00951 00952 uint8_t dmpSetFIFOProcessedCallback(void (*func) (void)); 00953 00954 uint8_t dmpInitFIFOParam(); 00955 uint8_t dmpCloseFIFO(); 00956 uint8_t dmpSetGyroDataSource(uint8_t source); 00957 uint8_t dmpDecodeQuantizedAccel(); 00958 uint32_t dmpGetGyroSumOfSquare(); 00959 uint32_t dmpGetAccelSumOfSquare(); 00960 void dmpOverrideQuaternion(long *q); 00961 uint16_t dmpGetFIFOPacketSize(); 00962 #endif 00963 00964 private: 00965 uint8_t devAddr; 00966 uint8_t buffer[14]; 00967 }; 00968 00969 #endif /* _MPU9150_H_ */
Generated on Thu Jul 14 2022 00:03:37 by 1.7.2