Li Weiyi
/
BalanceCar
虽然移植完毕,但是不work。需要细调……
Embed:
(wiki syntax)
Show/hide line numbers
MPU6050.h
00001 // I2Cdev library collection - MPU6050 I2C device class 00002 // Based on InvenSense MPU-6050 register map document rev. 2.0, 5/19/2011 (RM-MPU-6000A-00) 00003 // 10/3/2011 by Jeff Rowberg <jeff@rowberg.net> 00004 // Updates should (hopefully) always be available at https://github.com/jrowberg/i2cdevlib 00005 // 00006 // Changelog: 00007 // ... - ongoing debug release 00008 00009 // NOTE: THIS IS ONLY A PARIAL RELEASE. THIS DEVICE CLASS IS CURRENTLY UNDERGOING ACTIVE 00010 // DEVELOPMENT AND IS STILL MISSING SOME IMPORTANT FEATURES. PLEASE KEEP THIS IN MIND IF 00011 // YOU DECIDE TO USE THIS PARTICULAR CODE FOR ANYTHING. 00012 00013 /* ============================================ 00014 I2Cdev device library code is placed under the MIT license 00015 Copyright (c) 2012 Jeff Rowberg 00016 00017 Permission is hereby granted, free of charge, to any person obtaining a copy 00018 of this software and associated documentation files (the "Software"), to deal 00019 in the Software without restriction, including without limitation the rights 00020 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 00021 copies of the Software, and to permit persons to whom the Software is 00022 furnished to do so, subject to the following conditions: 00023 00024 The above copyright notice and this permission notice shall be included in 00025 all copies or substantial portions of the Software. 00026 00027 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 00028 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00029 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 00030 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 00031 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 00032 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 00033 THE SOFTWARE. 00034 =============================================== 00035 */ 00036 00037 #ifndef _MPU6050_H_ 00038 #define _MPU6050_H_ 00039 00040 #include "mbed.h" 00041 #include <math.h> 00042 #include "I2Cdev.h" 00043 //#include <avr/pgmspace.h> 00044 00045 00046 00047 #define MPU6050_ADDRESS_AD0_LOW 0x68 // address pin low (GND), default for InvenSense evaluation board 00048 #define MPU6050_ADDRESS_AD0_HIGH 0x69 // address pin high (VCC) 00049 #define MPU6050_DEFAULT_ADDRESS MPU6050_ADDRESS_AD0_LOW 00050 00051 #define MPU6050_RA_XG_OFFS_TC 0x00 //[7] PWR_MODE, [6:1] XG_OFFS_TC, [0] OTP_BNK_VLD 00052 #define MPU6050_RA_YG_OFFS_TC 0x01 //[7] PWR_MODE, [6:1] YG_OFFS_TC, [0] OTP_BNK_VLD 00053 #define MPU6050_RA_ZG_OFFS_TC 0x02 //[7] PWR_MODE, [6:1] ZG_OFFS_TC, [0] OTP_BNK_VLD 00054 #define MPU6050_RA_X_FINE_GAIN 0x03 //[7:0] X_FINE_GAIN 00055 #define MPU6050_RA_Y_FINE_GAIN 0x04 //[7:0] Y_FINE_GAIN 00056 #define MPU6050_RA_Z_FINE_GAIN 0x05 //[7:0] Z_FINE_GAIN 00057 #define MPU6050_RA_XA_OFFS_H 0x06 //[15:0] XA_OFFS 00058 #define MPU6050_RA_XA_OFFS_L_TC 0x07 00059 #define MPU6050_RA_YA_OFFS_H 0x08 //[15:0] YA_OFFS 00060 #define MPU6050_RA_YA_OFFS_L_TC 0x09 00061 #define MPU6050_RA_ZA_OFFS_H 0x0A //[15:0] ZA_OFFS 00062 #define MPU6050_RA_ZA_OFFS_L_TC 0x0B 00063 #define MPU6050_RA_XG_OFFS_USRH 0x13 //[15:0] XG_OFFS_USR 00064 #define MPU6050_RA_XG_OFFS_USRL 0x14 00065 #define MPU6050_RA_YG_OFFS_USRH 0x15 //[15:0] YG_OFFS_USR 00066 #define MPU6050_RA_YG_OFFS_USRL 0x16 00067 #define MPU6050_RA_ZG_OFFS_USRH 0x17 //[15:0] ZG_OFFS_USR 00068 #define MPU6050_RA_ZG_OFFS_USRL 0x18 00069 #define MPU6050_RA_SMPLRT_DIV 0x19 00070 #define MPU6050_RA_CONFIG 0x1A 00071 #define MPU6050_RA_GYRO_CONFIG 0x1B 00072 #define MPU6050_RA_ACCEL_CONFIG 0x1C 00073 #define MPU6050_RA_FF_THR 0x1D 00074 #define MPU6050_RA_FF_DUR 0x1E 00075 #define MPU6050_RA_MOT_THR 0x1F 00076 #define MPU6050_RA_MOT_DUR 0x20 00077 #define MPU6050_RA_ZRMOT_THR 0x21 00078 #define MPU6050_RA_ZRMOT_DUR 0x22 00079 #define MPU6050_RA_FIFO_EN 0x23 00080 #define MPU6050_RA_I2C_MST_CTRL 0x24 00081 #define MPU6050_RA_I2C_SLV0_ADDR 0x25 00082 #define MPU6050_RA_I2C_SLV0_REG 0x26 00083 #define MPU6050_RA_I2C_SLV0_CTRL 0x27 00084 #define MPU6050_RA_I2C_SLV1_ADDR 0x28 00085 #define MPU6050_RA_I2C_SLV1_REG 0x29 00086 #define MPU6050_RA_I2C_SLV1_CTRL 0x2A 00087 #define MPU6050_RA_I2C_SLV2_ADDR 0x2B 00088 #define MPU6050_RA_I2C_SLV2_REG 0x2C 00089 #define MPU6050_RA_I2C_SLV2_CTRL 0x2D 00090 #define MPU6050_RA_I2C_SLV3_ADDR 0x2E 00091 #define MPU6050_RA_I2C_SLV3_REG 0x2F 00092 #define MPU6050_RA_I2C_SLV3_CTRL 0x30 00093 #define MPU6050_RA_I2C_SLV4_ADDR 0x31 00094 #define MPU6050_RA_I2C_SLV4_REG 0x32 00095 #define MPU6050_RA_I2C_SLV4_DO 0x33 00096 #define MPU6050_RA_I2C_SLV4_CTRL 0x34 00097 #define MPU6050_RA_I2C_SLV4_DI 0x35 00098 #define MPU6050_RA_I2C_MST_STATUS 0x36 00099 #define MPU6050_RA_INT_PIN_CFG 0x37 00100 #define MPU6050_RA_INT_ENABLE 0x38 00101 #define MPU6050_RA_DMP_INT_STATUS 0x39 00102 #define MPU6050_RA_INT_STATUS 0x3A 00103 #define MPU6050_RA_ACCEL_XOUT_H 0x3B 00104 #define MPU6050_RA_ACCEL_XOUT_L 0x3C 00105 #define MPU6050_RA_ACCEL_YOUT_H 0x3D 00106 #define MPU6050_RA_ACCEL_YOUT_L 0x3E 00107 #define MPU6050_RA_ACCEL_ZOUT_H 0x3F 00108 #define MPU6050_RA_ACCEL_ZOUT_L 0x40 00109 #define MPU6050_RA_TEMP_OUT_H 0x41 00110 #define MPU6050_RA_TEMP_OUT_L 0x42 00111 #define MPU6050_RA_GYRO_XOUT_H 0x43 00112 #define MPU6050_RA_GYRO_XOUT_L 0x44 00113 #define MPU6050_RA_GYRO_YOUT_H 0x45 00114 #define MPU6050_RA_GYRO_YOUT_L 0x46 00115 #define MPU6050_RA_GYRO_ZOUT_H 0x47 00116 #define MPU6050_RA_GYRO_ZOUT_L 0x48 00117 #define MPU6050_RA_EXT_SENS_DATA_00 0x49 00118 #define MPU6050_RA_EXT_SENS_DATA_01 0x4A 00119 #define MPU6050_RA_EXT_SENS_DATA_02 0x4B 00120 #define MPU6050_RA_EXT_SENS_DATA_03 0x4C 00121 #define MPU6050_RA_EXT_SENS_DATA_04 0x4D 00122 #define MPU6050_RA_EXT_SENS_DATA_05 0x4E 00123 #define MPU6050_RA_EXT_SENS_DATA_06 0x4F 00124 #define MPU6050_RA_EXT_SENS_DATA_07 0x50 00125 #define MPU6050_RA_EXT_SENS_DATA_08 0x51 00126 #define MPU6050_RA_EXT_SENS_DATA_09 0x52 00127 #define MPU6050_RA_EXT_SENS_DATA_10 0x53 00128 #define MPU6050_RA_EXT_SENS_DATA_11 0x54 00129 #define MPU6050_RA_EXT_SENS_DATA_12 0x55 00130 #define MPU6050_RA_EXT_SENS_DATA_13 0x56 00131 #define MPU6050_RA_EXT_SENS_DATA_14 0x57 00132 #define MPU6050_RA_EXT_SENS_DATA_15 0x58 00133 #define MPU6050_RA_EXT_SENS_DATA_16 0x59 00134 #define MPU6050_RA_EXT_SENS_DATA_17 0x5A 00135 #define MPU6050_RA_EXT_SENS_DATA_18 0x5B 00136 #define MPU6050_RA_EXT_SENS_DATA_19 0x5C 00137 #define MPU6050_RA_EXT_SENS_DATA_20 0x5D 00138 #define MPU6050_RA_EXT_SENS_DATA_21 0x5E 00139 #define MPU6050_RA_EXT_SENS_DATA_22 0x5F 00140 #define MPU6050_RA_EXT_SENS_DATA_23 0x60 00141 #define MPU6050_RA_MOT_DETECT_STATUS 0x61 00142 #define MPU6050_RA_I2C_SLV0_DO 0x63 00143 #define MPU6050_RA_I2C_SLV1_DO 0x64 00144 #define MPU6050_RA_I2C_SLV2_DO 0x65 00145 #define MPU6050_RA_I2C_SLV3_DO 0x66 00146 #define MPU6050_RA_I2C_MST_DELAY_CTRL 0x67 00147 #define MPU6050_RA_SIGNAL_PATH_RESET 0x68 00148 #define MPU6050_RA_MOT_DETECT_CTRL 0x69 00149 #define MPU6050_RA_USER_CTRL 0x6A 00150 #define MPU6050_RA_PWR_MGMT_1 0x6B 00151 #define MPU6050_RA_PWR_MGMT_2 0x6C 00152 #define MPU6050_RA_BANK_SEL 0x6D 00153 #define MPU6050_RA_MEM_START_ADDR 0x6E 00154 #define MPU6050_RA_MEM_R_W 0x6F 00155 #define MPU6050_RA_DMP_CFG_1 0x70 00156 #define MPU6050_RA_DMP_CFG_2 0x71 00157 #define MPU6050_RA_FIFO_COUNTH 0x72 00158 #define MPU6050_RA_FIFO_COUNTL 0x73 00159 #define MPU6050_RA_FIFO_R_W 0x74 00160 #define MPU6050_RA_WHO_AM_I 0x75 00161 00162 #define MPU6050_TC_PWR_MODE_BIT 7 00163 #define MPU6050_TC_OFFSET_BIT 6 00164 #define MPU6050_TC_OFFSET_LENGTH 6 00165 #define MPU6050_TC_OTP_BNK_VLD_BIT 0 00166 00167 #define MPU6050_VDDIO_LEVEL_VLOGIC 0 00168 #define MPU6050_VDDIO_LEVEL_VDD 1 00169 00170 #define MPU6050_CFG_EXT_SYNC_SET_BIT 5 00171 #define MPU6050_CFG_EXT_SYNC_SET_LENGTH 3 00172 #define MPU6050_CFG_DLPF_CFG_BIT 2 00173 #define MPU6050_CFG_DLPF_CFG_LENGTH 3 00174 00175 #define MPU6050_EXT_SYNC_DISABLED 0x0 00176 #define MPU6050_EXT_SYNC_TEMP_OUT_L 0x1 00177 #define MPU6050_EXT_SYNC_GYRO_XOUT_L 0x2 00178 #define MPU6050_EXT_SYNC_GYRO_YOUT_L 0x3 00179 #define MPU6050_EXT_SYNC_GYRO_ZOUT_L 0x4 00180 #define MPU6050_EXT_SYNC_ACCEL_XOUT_L 0x5 00181 #define MPU6050_EXT_SYNC_ACCEL_YOUT_L 0x6 00182 #define MPU6050_EXT_SYNC_ACCEL_ZOUT_L 0x7 00183 00184 #define MPU6050_DLPF_BW_256 0x00 00185 #define MPU6050_DLPF_BW_188 0x01 00186 #define MPU6050_DLPF_BW_98 0x02 00187 #define MPU6050_DLPF_BW_42 0x03 00188 #define MPU6050_DLPF_BW_20 0x04 00189 #define MPU6050_DLPF_BW_10 0x05 00190 #define MPU6050_DLPF_BW_5 0x06 00191 00192 #define MPU6050_GCONFIG_FS_SEL_BIT 4 00193 #define MPU6050_GCONFIG_FS_SEL_LENGTH 2 00194 00195 #define MPU6050_GYRO_FS_250 0x00 00196 #define MPU6050_GYRO_FS_500 0x01 00197 #define MPU6050_GYRO_FS_1000 0x02 00198 #define MPU6050_GYRO_FS_2000 0x03 00199 00200 #define MPU6050_ACONFIG_XA_ST_BIT 7 00201 #define MPU6050_ACONFIG_YA_ST_BIT 6 00202 #define MPU6050_ACONFIG_ZA_ST_BIT 5 00203 #define MPU6050_ACONFIG_AFS_SEL_BIT 4 00204 #define MPU6050_ACONFIG_AFS_SEL_LENGTH 2 00205 #define MPU6050_ACONFIG_ACCEL_HPF_BIT 2 00206 #define MPU6050_ACONFIG_ACCEL_HPF_LENGTH 3 00207 00208 #define MPU6050_ACCEL_FS_2 0x00 00209 #define MPU6050_ACCEL_FS_4 0x01 00210 #define MPU6050_ACCEL_FS_8 0x02 00211 #define MPU6050_ACCEL_FS_16 0x03 00212 00213 #define MPU6050_DHPF_RESET 0x00 00214 #define MPU6050_DHPF_5 0x01 00215 #define MPU6050_DHPF_2P5 0x02 00216 #define MPU6050_DHPF_1P25 0x03 00217 #define MPU6050_DHPF_0P63 0x04 00218 #define MPU6050_DHPF_HOLD 0x07 00219 00220 #define MPU6050_TEMP_FIFO_EN_BIT 7 00221 #define MPU6050_XG_FIFO_EN_BIT 6 00222 #define MPU6050_YG_FIFO_EN_BIT 5 00223 #define MPU6050_ZG_FIFO_EN_BIT 4 00224 #define MPU6050_ACCEL_FIFO_EN_BIT 3 00225 #define MPU6050_SLV2_FIFO_EN_BIT 2 00226 #define MPU6050_SLV1_FIFO_EN_BIT 1 00227 #define MPU6050_SLV0_FIFO_EN_BIT 0 00228 00229 #define MPU6050_MULT_MST_EN_BIT 7 00230 #define MPU6050_WAIT_FOR_ES_BIT 6 00231 #define MPU6050_SLV_3_FIFO_EN_BIT 5 00232 #define MPU6050_I2C_MST_P_NSR_BIT 4 00233 #define MPU6050_I2C_MST_CLK_BIT 3 00234 #define MPU6050_I2C_MST_CLK_LENGTH 4 00235 00236 #define MPU6050_CLOCK_DIV_348 0x0 00237 #define MPU6050_CLOCK_DIV_333 0x1 00238 #define MPU6050_CLOCK_DIV_320 0x2 00239 #define MPU6050_CLOCK_DIV_308 0x3 00240 #define MPU6050_CLOCK_DIV_296 0x4 00241 #define MPU6050_CLOCK_DIV_286 0x5 00242 #define MPU6050_CLOCK_DIV_276 0x6 00243 #define MPU6050_CLOCK_DIV_267 0x7 00244 #define MPU6050_CLOCK_DIV_258 0x8 00245 #define MPU6050_CLOCK_DIV_500 0x9 00246 #define MPU6050_CLOCK_DIV_471 0xA 00247 #define MPU6050_CLOCK_DIV_444 0xB 00248 #define MPU6050_CLOCK_DIV_421 0xC 00249 #define MPU6050_CLOCK_DIV_400 0xD 00250 #define MPU6050_CLOCK_DIV_381 0xE 00251 #define MPU6050_CLOCK_DIV_364 0xF 00252 00253 #define MPU6050_I2C_SLV_RW_BIT 7 00254 #define MPU6050_I2C_SLV_ADDR_BIT 6 00255 #define MPU6050_I2C_SLV_ADDR_LENGTH 7 00256 #define MPU6050_I2C_SLV_EN_BIT 7 00257 #define MPU6050_I2C_SLV_BYTE_SW_BIT 6 00258 #define MPU6050_I2C_SLV_REG_DIS_BIT 5 00259 #define MPU6050_I2C_SLV_GRP_BIT 4 00260 #define MPU6050_I2C_SLV_LEN_BIT 3 00261 #define MPU6050_I2C_SLV_LEN_LENGTH 4 00262 00263 #define MPU6050_I2C_SLV4_RW_BIT 7 00264 #define MPU6050_I2C_SLV4_ADDR_BIT 6 00265 #define MPU6050_I2C_SLV4_ADDR_LENGTH 7 00266 #define MPU6050_I2C_SLV4_EN_BIT 7 00267 #define MPU6050_I2C_SLV4_INT_EN_BIT 6 00268 #define MPU6050_I2C_SLV4_REG_DIS_BIT 5 00269 #define MPU6050_I2C_SLV4_MST_DLY_BIT 4 00270 #define MPU6050_I2C_SLV4_MST_DLY_LENGTH 5 00271 00272 #define MPU6050_MST_PASS_THROUGH_BIT 7 00273 #define MPU6050_MST_I2C_SLV4_DONE_BIT 6 00274 #define MPU6050_MST_I2C_LOST_ARB_BIT 5 00275 #define MPU6050_MST_I2C_SLV4_NACK_BIT 4 00276 #define MPU6050_MST_I2C_SLV3_NACK_BIT 3 00277 #define MPU6050_MST_I2C_SLV2_NACK_BIT 2 00278 #define MPU6050_MST_I2C_SLV1_NACK_BIT 1 00279 #define MPU6050_MST_I2C_SLV0_NACK_BIT 0 00280 00281 #define MPU6050_INTCFG_INT_LEVEL_BIT 7 00282 #define MPU6050_INTCFG_INT_OPEN_BIT 6 00283 #define MPU6050_INTCFG_LATCH_INT_EN_BIT 5 00284 #define MPU6050_INTCFG_INT_RD_CLEAR_BIT 4 00285 #define MPU6050_INTCFG_FSYNC_INT_LEVEL_BIT 3 00286 #define MPU6050_INTCFG_FSYNC_INT_EN_BIT 2 00287 #define MPU6050_INTCFG_I2C_BYPASS_EN_BIT 1 00288 #define MPU6050_INTCFG_CLKOUT_EN_BIT 0 00289 00290 #define MPU6050_INTMODE_ACTIVEHIGH 0x00 00291 #define MPU6050_INTMODE_ACTIVELOW 0x01 00292 00293 #define MPU6050_INTDRV_PUSHPULL 0x00 00294 #define MPU6050_INTDRV_OPENDRAIN 0x01 00295 00296 #define MPU6050_INTLATCH_50USPULSE 0x00 00297 #define MPU6050_INTLATCH_WAITCLEAR 0x01 00298 00299 #define MPU6050_INTCLEAR_STATUSREAD 0x00 00300 #define MPU6050_INTCLEAR_ANYREAD 0x01 00301 00302 #define MPU6050_INTERRUPT_FF_BIT 7 00303 #define MPU6050_INTERRUPT_MOT_BIT 6 00304 #define MPU6050_INTERRUPT_ZMOT_BIT 5 00305 #define MPU6050_INTERRUPT_FIFO_OFLOW_BIT 4 00306 #define MPU6050_INTERRUPT_I2C_MST_INT_BIT 3 00307 #define MPU6050_INTERRUPT_PLL_RDY_INT_BIT 2 00308 #define MPU6050_INTERRUPT_DMP_INT_BIT 1 00309 #define MPU6050_INTERRUPT_DATA_RDY_BIT 0 00310 00311 // TODO: figure out what these actually do 00312 // UMPL source code is not very obivous 00313 #define MPU6050_DMPINT_5_BIT 5 00314 #define MPU6050_DMPINT_4_BIT 4 00315 #define MPU6050_DMPINT_3_BIT 3 00316 #define MPU6050_DMPINT_2_BIT 2 00317 #define MPU6050_DMPINT_1_BIT 1 00318 #define MPU6050_DMPINT_0_BIT 0 00319 00320 #define MPU6050_MOTION_MOT_XNEG_BIT 7 00321 #define MPU6050_MOTION_MOT_XPOS_BIT 6 00322 #define MPU6050_MOTION_MOT_YNEG_BIT 5 00323 #define MPU6050_MOTION_MOT_YPOS_BIT 4 00324 #define MPU6050_MOTION_MOT_ZNEG_BIT 3 00325 #define MPU6050_MOTION_MOT_ZPOS_BIT 2 00326 #define MPU6050_MOTION_MOT_ZRMOT_BIT 0 00327 00328 #define MPU6050_DELAYCTRL_DELAY_ES_SHADOW_BIT 7 00329 #define MPU6050_DELAYCTRL_I2C_SLV4_DLY_EN_BIT 4 00330 #define MPU6050_DELAYCTRL_I2C_SLV3_DLY_EN_BIT 3 00331 #define MPU6050_DELAYCTRL_I2C_SLV2_DLY_EN_BIT 2 00332 #define MPU6050_DELAYCTRL_I2C_SLV1_DLY_EN_BIT 1 00333 #define MPU6050_DELAYCTRL_I2C_SLV0_DLY_EN_BIT 0 00334 00335 #define MPU6050_PATHRESET_GYRO_RESET_BIT 2 00336 #define MPU6050_PATHRESET_ACCEL_RESET_BIT 1 00337 #define MPU6050_PATHRESET_TEMP_RESET_BIT 0 00338 00339 #define MPU6050_DETECT_ACCEL_ON_DELAY_BIT 5 00340 #define MPU6050_DETECT_ACCEL_ON_DELAY_LENGTH 2 00341 #define MPU6050_DETECT_FF_COUNT_BIT 3 00342 #define MPU6050_DETECT_FF_COUNT_LENGTH 2 00343 #define MPU6050_DETECT_MOT_COUNT_BIT 1 00344 #define MPU6050_DETECT_MOT_COUNT_LENGTH 2 00345 00346 #define MPU6050_DETECT_DECREMENT_RESET 0x0 00347 #define MPU6050_DETECT_DECREMENT_1 0x1 00348 #define MPU6050_DETECT_DECREMENT_2 0x2 00349 #define MPU6050_DETECT_DECREMENT_4 0x3 00350 00351 #define MPU6050_USERCTRL_DMP_EN_BIT 7 00352 #define MPU6050_USERCTRL_FIFO_EN_BIT 6 00353 #define MPU6050_USERCTRL_I2C_MST_EN_BIT 5 00354 #define MPU6050_USERCTRL_I2C_IF_DIS_BIT 4 00355 #define MPU6050_USERCTRL_DMP_RESET_BIT 3 00356 #define MPU6050_USERCTRL_FIFO_RESET_BIT 2 00357 #define MPU6050_USERCTRL_I2C_MST_RESET_BIT 1 00358 #define MPU6050_USERCTRL_SIG_COND_RESET_BIT 0 00359 00360 #define MPU6050_PWR1_DEVICE_RESET_BIT 7 00361 #define MPU6050_PWR1_SLEEP_BIT 6 00362 #define MPU6050_PWR1_CYCLE_BIT 5 00363 #define MPU6050_PWR1_TEMP_DIS_BIT 3 00364 #define MPU6050_PWR1_CLKSEL_BIT 2 00365 #define MPU6050_PWR1_CLKSEL_LENGTH 3 00366 00367 #define MPU6050_CLOCK_INTERNAL 0x00 00368 #define MPU6050_CLOCK_PLL_XGYRO 0x01 00369 #define MPU6050_CLOCK_PLL_YGYRO 0x02 00370 #define MPU6050_CLOCK_PLL_ZGYRO 0x03 00371 #define MPU6050_CLOCK_PLL_EXT32K 0x04 00372 #define MPU6050_CLOCK_PLL_EXT19M 0x05 00373 #define MPU6050_CLOCK_KEEP_RESET 0x07 00374 00375 #define MPU6050_PWR2_LP_WAKE_CTRL_BIT 7 00376 #define MPU6050_PWR2_LP_WAKE_CTRL_LENGTH 2 00377 #define MPU6050_PWR2_STBY_XA_BIT 5 00378 #define MPU6050_PWR2_STBY_YA_BIT 4 00379 #define MPU6050_PWR2_STBY_ZA_BIT 3 00380 #define MPU6050_PWR2_STBY_XG_BIT 2 00381 #define MPU6050_PWR2_STBY_YG_BIT 1 00382 #define MPU6050_PWR2_STBY_ZG_BIT 0 00383 00384 #define MPU6050_WAKE_FREQ_1P25 0x0 00385 #define MPU6050_WAKE_FREQ_2P5 0x1 00386 #define MPU6050_WAKE_FREQ_5 0x2 00387 #define MPU6050_WAKE_FREQ_10 0x3 00388 00389 #define MPU6050_BANKSEL_PRFTCH_EN_BIT 6 00390 #define MPU6050_BANKSEL_CFG_USER_BANK_BIT 5 00391 #define MPU6050_BANKSEL_MEM_SEL_BIT 4 00392 #define MPU6050_BANKSEL_MEM_SEL_LENGTH 5 00393 00394 #define MPU6050_WHO_AM_I_BIT 6 00395 #define MPU6050_WHO_AM_I_LENGTH 6 00396 00397 #define MPU6050_DMP_MEMORY_BANKS 8 00398 #define MPU6050_DMP_MEMORY_BANK_SIZE 256 00399 #define MPU6050_DMP_MEMORY_CHUNK_SIZE 16 00400 00401 // note: DMP code memory blocks defined at end of header file 00402 00403 class MPU6050 { 00404 public: 00405 MPU6050(); 00406 MPU6050(uint8_t address); 00407 00408 void initialize(); 00409 bool testConnection(); 00410 00411 // AUX_VDDIO register 00412 uint8_t getAuxVDDIOLevel(); 00413 void setAuxVDDIOLevel(uint8_t level); 00414 00415 // SMPLRT_DIV register 00416 uint8_t getRate(); 00417 void setRate(uint8_t rate); 00418 00419 // CONFIG register 00420 uint8_t getExternalFrameSync(); 00421 void setExternalFrameSync(uint8_t sync); 00422 uint8_t getDLPFMode(); 00423 void setDLPFMode(uint8_t bandwidth); 00424 00425 // GYRO_CONFIG register 00426 uint8_t getFullScaleGyroRange(); 00427 void setFullScaleGyroRange(uint8_t range); 00428 00429 // ACCEL_CONFIG register 00430 bool getAccelXSelfTest(); 00431 void setAccelXSelfTest(bool enabled); 00432 bool getAccelYSelfTest(); 00433 void setAccelYSelfTest(bool enabled); 00434 bool getAccelZSelfTest(); 00435 void setAccelZSelfTest(bool enabled); 00436 uint8_t getFullScaleAccelRange(); 00437 void setFullScaleAccelRange(uint8_t range); 00438 uint8_t getDHPFMode(); 00439 void setDHPFMode(uint8_t mode); 00440 00441 // FF_THR register 00442 uint8_t getFreefallDetectionThreshold(); 00443 void setFreefallDetectionThreshold(uint8_t threshold); 00444 00445 // FF_DUR register 00446 uint8_t getFreefallDetectionDuration(); 00447 void setFreefallDetectionDuration(uint8_t duration); 00448 00449 // MOT_THR register 00450 uint8_t getMotionDetectionThreshold(); 00451 void setMotionDetectionThreshold(uint8_t threshold); 00452 00453 // MOT_DUR register 00454 uint8_t getMotionDetectionDuration(); 00455 void setMotionDetectionDuration(uint8_t duration); 00456 00457 // ZRMOT_THR register 00458 uint8_t getZeroMotionDetectionThreshold(); 00459 void setZeroMotionDetectionThreshold(uint8_t threshold); 00460 00461 // ZRMOT_DUR register 00462 uint8_t getZeroMotionDetectionDuration(); 00463 void setZeroMotionDetectionDuration(uint8_t duration); 00464 00465 // FIFO_EN register 00466 bool getTempFIFOEnabled(); 00467 void setTempFIFOEnabled(bool enabled); 00468 bool getXGyroFIFOEnabled(); 00469 void setXGyroFIFOEnabled(bool enabled); 00470 bool getYGyroFIFOEnabled(); 00471 void setYGyroFIFOEnabled(bool enabled); 00472 bool getZGyroFIFOEnabled(); 00473 void setZGyroFIFOEnabled(bool enabled); 00474 bool getAccelFIFOEnabled(); 00475 void setAccelFIFOEnabled(bool enabled); 00476 bool getSlave2FIFOEnabled(); 00477 void setSlave2FIFOEnabled(bool enabled); 00478 bool getSlave1FIFOEnabled(); 00479 void setSlave1FIFOEnabled(bool enabled); 00480 bool getSlave0FIFOEnabled(); 00481 void setSlave0FIFOEnabled(bool enabled); 00482 00483 // I2C_MST_CTRL register 00484 bool getMultiMasterEnabled(); 00485 void setMultiMasterEnabled(bool enabled); 00486 bool getWaitForExternalSensorEnabled(); 00487 void setWaitForExternalSensorEnabled(bool enabled); 00488 bool getSlave3FIFOEnabled(); 00489 void setSlave3FIFOEnabled(bool enabled); 00490 bool getSlaveReadWriteTransitionEnabled(); 00491 void setSlaveReadWriteTransitionEnabled(bool enabled); 00492 uint8_t getMasterClockSpeed(); 00493 void setMasterClockSpeed(uint8_t speed); 00494 00495 // I2C_SLV* registers (Slave 0-3) 00496 uint8_t getSlaveAddress(uint8_t num); 00497 void setSlaveAddress(uint8_t num, uint8_t address); 00498 uint8_t getSlaveRegister(uint8_t num); 00499 void setSlaveRegister(uint8_t num, uint8_t reg); 00500 bool getSlaveEnabled(uint8_t num); 00501 void setSlaveEnabled(uint8_t num, bool enabled); 00502 bool getSlaveWordByteSwap(uint8_t num); 00503 void setSlaveWordByteSwap(uint8_t num, bool enabled); 00504 bool getSlaveWriteMode(uint8_t num); 00505 void setSlaveWriteMode(uint8_t num, bool mode); 00506 bool getSlaveWordGroupOffset(uint8_t num); 00507 void setSlaveWordGroupOffset(uint8_t num, bool enabled); 00508 uint8_t getSlaveDataLength(uint8_t num); 00509 void setSlaveDataLength(uint8_t num, uint8_t length); 00510 00511 // I2C_SLV* registers (Slave 4) 00512 uint8_t getSlave4Address(); 00513 void setSlave4Address(uint8_t address); 00514 uint8_t getSlave4Register(); 00515 void setSlave4Register(uint8_t reg); 00516 void setSlave4OutputByte(uint8_t data); 00517 bool getSlave4Enabled(); 00518 void setSlave4Enabled(bool enabled); 00519 bool getSlave4InterruptEnabled(); 00520 void setSlave4InterruptEnabled(bool enabled); 00521 bool getSlave4WriteMode(); 00522 void setSlave4WriteMode(bool mode); 00523 uint8_t getSlave4MasterDelay(); 00524 void setSlave4MasterDelay(uint8_t delay); 00525 uint8_t getSlate4InputByte(); 00526 00527 // I2C_MST_STATUS register 00528 bool getPassthroughStatus(); 00529 bool getSlave4IsDone(); 00530 bool getLostArbitration(); 00531 bool getSlave4Nack(); 00532 bool getSlave3Nack(); 00533 bool getSlave2Nack(); 00534 bool getSlave1Nack(); 00535 bool getSlave0Nack(); 00536 00537 // INT_PIN_CFG register 00538 bool getInterruptMode(); 00539 void setInterruptMode(bool mode); 00540 bool getInterruptDrive(); 00541 void setInterruptDrive(bool drive); 00542 bool getInterruptLatch(); 00543 void setInterruptLatch(bool latch); 00544 bool getInterruptLatchClear(); 00545 void setInterruptLatchClear(bool clear); 00546 bool getFSyncInterruptLevel(); 00547 void setFSyncInterruptLevel(bool level); 00548 bool getFSyncInterruptEnabled(); 00549 void setFSyncInterruptEnabled(bool enabled); 00550 bool getI2CBypassEnabled(); 00551 void setI2CBypassEnabled(bool enabled); 00552 bool getClockOutputEnabled(); 00553 void setClockOutputEnabled(bool enabled); 00554 00555 // INT_ENABLE register 00556 uint8_t getIntEnabled(); 00557 void setIntEnabled(uint8_t enabled); 00558 bool getIntFreefallEnabled(); 00559 void setIntFreefallEnabled(bool enabled); 00560 bool getIntMotionEnabled(); 00561 void setIntMotionEnabled(bool enabled); 00562 bool getIntZeroMotionEnabled(); 00563 void setIntZeroMotionEnabled(bool enabled); 00564 bool getIntFIFOBufferOverflowEnabled(); 00565 void setIntFIFOBufferOverflowEnabled(bool enabled); 00566 bool getIntI2CMasterEnabled(); 00567 void setIntI2CMasterEnabled(bool enabled); 00568 bool getIntDataReadyEnabled(); 00569 void setIntDataReadyEnabled(bool enabled); 00570 00571 // INT_STATUS register 00572 uint8_t getIntStatus(); 00573 bool getIntFreefallStatus(); 00574 bool getIntMotionStatus(); 00575 bool getIntZeroMotionStatus(); 00576 bool getIntFIFOBufferOverflowStatus(); 00577 bool getIntI2CMasterStatus(); 00578 bool getIntDataReadyStatus(); 00579 00580 // ACCEL_*OUT_* registers 00581 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); 00582 void getMotion6(int16_t* ax, int16_t* ay, int16_t* az, int16_t* gx, int16_t* gy, int16_t* gz); 00583 void getAcceleration(int16_t* x, int16_t* y, int16_t* z); 00584 int16_t getAccelerationX(); 00585 int16_t getAccelerationY(); 00586 int16_t getAccelerationZ(); 00587 00588 // TEMP_OUT_* registers 00589 int16_t getTemperature(); 00590 00591 // GYRO_*OUT_* registers 00592 void getRotation(int16_t* x, int16_t* y, int16_t* z); 00593 int16_t getRotationX(); 00594 int16_t getRotationY(); 00595 int16_t getRotationZ(); 00596 00597 // EXT_SENS_DATA_* registers 00598 uint8_t getExternalSensorByte(int position); 00599 uint16_t getExternalSensorWord(int position); 00600 uint32_t getExternalSensorDWord(int position); 00601 00602 // MOT_DETECT_STATUS register 00603 bool getXNegMotionDetected(); 00604 bool getXPosMotionDetected(); 00605 bool getYNegMotionDetected(); 00606 bool getYPosMotionDetected(); 00607 bool getZNegMotionDetected(); 00608 bool getZPosMotionDetected(); 00609 bool getZeroMotionDetected(); 00610 00611 // I2C_SLV*_DO register 00612 void setSlaveOutputByte(uint8_t num, uint8_t data); 00613 00614 // I2C_MST_DELAY_CTRL register 00615 bool getExternalShadowDelayEnabled(); 00616 void setExternalShadowDelayEnabled(bool enabled); 00617 bool getSlaveDelayEnabled(uint8_t num); 00618 void setSlaveDelayEnabled(uint8_t num, bool enabled); 00619 00620 // SIGNAL_PATH_RESET register 00621 void resetGyroscopePath(); 00622 void resetAccelerometerPath(); 00623 void resetTemperaturePath(); 00624 00625 // MOT_DETECT_CTRL register 00626 uint8_t getAccelerometerPowerOnDelay(); 00627 void setAccelerometerPowerOnDelay(uint8_t delay); 00628 uint8_t getFreefallDetectionCounterDecrement(); 00629 void setFreefallDetectionCounterDecrement(uint8_t decrement); 00630 uint8_t getMotionDetectionCounterDecrement(); 00631 void setMotionDetectionCounterDecrement(uint8_t decrement); 00632 00633 // USER_CTRL register 00634 bool getFIFOEnabled(); 00635 void setFIFOEnabled(bool enabled); 00636 bool getI2CMasterModeEnabled(); 00637 void setI2CMasterModeEnabled(bool enabled); 00638 void switchSPIEnabled(bool enabled); 00639 void resetFIFO(); 00640 void resetI2CMaster(); 00641 void resetSensors(); 00642 00643 // PWR_MGMT_1 register 00644 void reset(); 00645 bool getSleepEnabled(); 00646 void setSleepEnabled(bool enabled); 00647 bool getWakeCycleEnabled(); 00648 void setWakeCycleEnabled(bool enabled); 00649 bool getTempSensorEnabled(); 00650 void setTempSensorEnabled(bool enabled); 00651 uint8_t getClockSource(); 00652 void setClockSource(uint8_t source); 00653 00654 // PWR_MGMT_2 register 00655 uint8_t getWakeFrequency(); 00656 void setWakeFrequency(uint8_t frequency); 00657 bool getStandbyXAccelEnabled(); 00658 void setStandbyXAccelEnabled(bool enabled); 00659 bool getStandbyYAccelEnabled(); 00660 void setStandbyYAccelEnabled(bool enabled); 00661 bool getStandbyZAccelEnabled(); 00662 void setStandbyZAccelEnabled(bool enabled); 00663 bool getStandbyXGyroEnabled(); 00664 void setStandbyXGyroEnabled(bool enabled); 00665 bool getStandbyYGyroEnabled(); 00666 void setStandbyYGyroEnabled(bool enabled); 00667 bool getStandbyZGyroEnabled(); 00668 void setStandbyZGyroEnabled(bool enabled); 00669 00670 // FIFO_COUNT_* registers 00671 uint16_t getFIFOCount(); 00672 00673 // FIFO_R_W register 00674 uint8_t getFIFOByte(); 00675 void setFIFOByte(uint8_t data); 00676 void getFIFOBytes(uint8_t *data, uint8_t length); 00677 00678 // WHO_AM_I register 00679 uint8_t getDeviceID(); 00680 void setDeviceID(uint8_t id); 00681 00682 // ======== UNDOCUMENTED/DMP REGISTERS/METHODS ======== 00683 00684 // XG_OFFS_TC register 00685 uint8_t getOTPBankValid(); 00686 void setOTPBankValid(bool enabled); 00687 int8_t getXGyroOffsetTC(); 00688 void setXGyroOffsetTC(int8_t offset); 00689 00690 // YG_OFFS_TC register 00691 int8_t getYGyroOffsetTC(); 00692 void setYGyroOffsetTC(int8_t offset); 00693 00694 // ZG_OFFS_TC register 00695 int8_t getZGyroOffsetTC(); 00696 void setZGyroOffsetTC(int8_t offset); 00697 00698 // X_FINE_GAIN register 00699 int8_t getXFineGain(); 00700 void setXFineGain(int8_t gain); 00701 00702 // Y_FINE_GAIN register 00703 int8_t getYFineGain(); 00704 void setYFineGain(int8_t gain); 00705 00706 // Z_FINE_GAIN register 00707 int8_t getZFineGain(); 00708 void setZFineGain(int8_t gain); 00709 00710 // XA_OFFS_* registers 00711 int16_t getXAccelOffset(); 00712 void setXAccelOffset(int16_t offset); 00713 00714 // YA_OFFS_* register 00715 int16_t getYAccelOffset(); 00716 void setYAccelOffset(int16_t offset); 00717 00718 // ZA_OFFS_* register 00719 int16_t getZAccelOffset(); 00720 void setZAccelOffset(int16_t offset); 00721 00722 // XG_OFFS_USR* registers 00723 int16_t getXGyroOffset(); 00724 void setXGyroOffset(int16_t offset); 00725 00726 // YG_OFFS_USR* register 00727 int16_t getYGyroOffset(); 00728 void setYGyroOffset(int16_t offset); 00729 00730 // ZG_OFFS_USR* register 00731 int16_t getZGyroOffset(); 00732 void setZGyroOffset(int16_t offset); 00733 00734 // INT_ENABLE register (DMP functions) 00735 bool getIntPLLReadyEnabled(); 00736 void setIntPLLReadyEnabled(bool enabled); 00737 bool getIntDMPEnabled(); 00738 void setIntDMPEnabled(bool enabled); 00739 00740 // DMP_INT_STATUS 00741 bool getDMPInt5Status(); 00742 bool getDMPInt4Status(); 00743 bool getDMPInt3Status(); 00744 bool getDMPInt2Status(); 00745 bool getDMPInt1Status(); 00746 bool getDMPInt0Status(); 00747 00748 // INT_STATUS register (DMP functions) 00749 bool getIntPLLReadyStatus(); 00750 bool getIntDMPStatus(); 00751 00752 // USER_CTRL register (DMP functions) 00753 bool getDMPEnabled(); 00754 void setDMPEnabled(bool enabled); 00755 void resetDMP(); 00756 00757 // BANK_SEL register 00758 void setMemoryBank(uint8_t bank, bool prefetchEnabled=false, bool userBank=false); 00759 00760 // MEM_START_ADDR register 00761 void setMemoryStartAddress(uint8_t address); 00762 00763 // MEM_R_W register 00764 uint8_t readMemoryByte(); 00765 void writeMemoryByte(uint8_t data); 00766 void readMemoryBlock(uint8_t *data, uint16_t dataSize, uint8_t bank=0, uint8_t address=0); 00767 bool writeMemoryBlock(const uint8_t *data, uint16_t dataSize, uint8_t bank=0, uint8_t address=0, bool verify=true, bool useProgMem=false); 00768 bool writeProgMemoryBlock(const uint8_t *data, uint16_t dataSize, uint8_t bank=0, uint8_t address=0, bool verify=true); 00769 00770 bool writeDMPConfigurationSet(const uint8_t *data, uint16_t dataSize, bool useProgMem=false); 00771 bool writeProgDMPConfigurationSet(const uint8_t *data, uint16_t dataSize); 00772 00773 // DMP_CFG_1 register 00774 uint8_t getDMPConfig1(); 00775 void setDMPConfig1(uint8_t config); 00776 00777 // DMP_CFG_2 register 00778 uint8_t getDMPConfig2(); 00779 void setDMPConfig2(uint8_t config); 00780 00781 // special methods for MotionApps 2.0 implementation 00782 #ifdef MPU6050_INCLUDE_DMP_MOTIONAPPS20 00783 uint8_t *dmpPacketBuffer; 00784 uint16_t dmpPacketSize; 00785 00786 uint8_t dmpInitialize(); 00787 bool dmpPacketAvailable(); 00788 00789 uint8_t dmpSetFIFORate(uint8_t fifoRate); 00790 uint8_t dmpGetFIFORate(); 00791 uint8_t dmpGetSampleStepSizeMS(); 00792 uint8_t dmpGetSampleFrequency(); 00793 int32_t dmpDecodeTemperature(int8_t tempReg); 00794 00795 // Register callbacks after a packet of FIFO data is processed 00796 //uint8_t dmpRegisterFIFORateProcess(inv_obj_func func, int16_t priority); 00797 //uint8_t dmpUnregisterFIFORateProcess(inv_obj_func func); 00798 uint8_t dmpRunFIFORateProcesses(); 00799 00800 // Setup FIFO for various output 00801 uint8_t dmpSendQuaternion(uint_fast16_t accuracy); 00802 uint8_t dmpSendGyro(uint_fast16_t elements, uint_fast16_t accuracy); 00803 uint8_t dmpSendAccel(uint_fast16_t elements, uint_fast16_t accuracy); 00804 uint8_t dmpSendLinearAccel(uint_fast16_t elements, uint_fast16_t accuracy); 00805 uint8_t dmpSendLinearAccelInWorld(uint_fast16_t elements, uint_fast16_t accuracy); 00806 uint8_t dmpSendControlData(uint_fast16_t elements, uint_fast16_t accuracy); 00807 uint8_t dmpSendSensorData(uint_fast16_t elements, uint_fast16_t accuracy); 00808 uint8_t dmpSendExternalSensorData(uint_fast16_t elements, uint_fast16_t accuracy); 00809 uint8_t dmpSendGravity(uint_fast16_t elements, uint_fast16_t accuracy); 00810 uint8_t dmpSendPacketNumber(uint_fast16_t accuracy); 00811 uint8_t dmpSendQuantizedAccel(uint_fast16_t elements, uint_fast16_t accuracy); 00812 uint8_t dmpSendEIS(uint_fast16_t elements, uint_fast16_t accuracy); 00813 00814 // Get Fixed Point data from FIFO 00815 uint8_t dmpGetAccel(int32_t *data, const uint8_t* packet=0); 00816 uint8_t dmpGetAccel(int16_t *data, const uint8_t* packet=0); 00817 uint8_t dmpGetAccel(VectorInt16 *v, const uint8_t* packet=0); 00818 uint8_t dmpGetQuaternion(int32_t *data, const uint8_t* packet=0); 00819 uint8_t dmpGetQuaternion(int16_t *data, const uint8_t* packet=0); 00820 uint8_t dmpGetQuaternion(Quaternion *q, const uint8_t* packet=0); 00821 uint8_t dmpGet6AxisQuaternion(int32_t *data, const uint8_t* packet=0); 00822 uint8_t dmpGet6AxisQuaternion(int16_t *data, const uint8_t* packet=0); 00823 uint8_t dmpGet6AxisQuaternion(Quaternion *q, const uint8_t* packet=0); 00824 uint8_t dmpGetRelativeQuaternion(int32_t *data, const uint8_t* packet=0); 00825 uint8_t dmpGetRelativeQuaternion(int16_t *data, const uint8_t* packet=0); 00826 uint8_t dmpGetRelativeQuaternion(Quaternion *data, const uint8_t* packet=0); 00827 uint8_t dmpGetGyro(int32_t *data, const uint8_t* packet=0); 00828 uint8_t dmpGetGyro(int16_t *data, const uint8_t* packet=0); 00829 uint8_t dmpGetGyro(VectorInt16 *v, const uint8_t* packet=0); 00830 uint8_t dmpSetLinearAccelFilterCoefficient(float coef); 00831 uint8_t dmpGetLinearAccel(int32_t *data, const uint8_t* packet=0); 00832 uint8_t dmpGetLinearAccel(int16_t *data, const uint8_t* packet=0); 00833 uint8_t dmpGetLinearAccel(VectorInt16 *v, const uint8_t* packet=0); 00834 uint8_t dmpGetLinearAccel(VectorInt16 *v, VectorInt16 *vRaw, VectorFloat *gravity); 00835 uint8_t dmpGetLinearAccelInWorld(int32_t *data, const uint8_t* packet=0); 00836 uint8_t dmpGetLinearAccelInWorld(int16_t *data, const uint8_t* packet=0); 00837 uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, const uint8_t* packet=0); 00838 uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, VectorInt16 *vReal, Quaternion *q); 00839 uint8_t dmpGetGyroAndAccelSensor(int32_t *data, const uint8_t* packet=0); 00840 uint8_t dmpGetGyroAndAccelSensor(int16_t *data, const uint8_t* packet=0); 00841 uint8_t dmpGetGyroAndAccelSensor(VectorInt16 *g, VectorInt16 *a, const uint8_t* packet=0); 00842 uint8_t dmpGetGyroSensor(int32_t *data, const uint8_t* packet=0); 00843 uint8_t dmpGetGyroSensor(int16_t *data, const uint8_t* packet=0); 00844 uint8_t dmpGetGyroSensor(VectorInt16 *v, const uint8_t* packet=0); 00845 uint8_t dmpGetControlData(int32_t *data, const uint8_t* packet=0); 00846 uint8_t dmpGetTemperature(int32_t *data, const uint8_t* packet=0); 00847 uint8_t dmpGetGravity(int32_t *data, const uint8_t* packet=0); 00848 uint8_t dmpGetGravity(int16_t *data, const uint8_t* packet=0); 00849 uint8_t dmpGetGravity(VectorInt16 *v, const uint8_t* packet=0); 00850 uint8_t dmpGetGravity(VectorFloat *v, Quaternion *q); 00851 uint8_t dmpGetUnquantizedAccel(int32_t *data, const uint8_t* packet=0); 00852 uint8_t dmpGetUnquantizedAccel(int16_t *data, const uint8_t* packet=0); 00853 uint8_t dmpGetUnquantizedAccel(VectorInt16 *v, const uint8_t* packet=0); 00854 uint8_t dmpGetQuantizedAccel(int32_t *data, const uint8_t* packet=0); 00855 uint8_t dmpGetQuantizedAccel(int16_t *data, const uint8_t* packet=0); 00856 uint8_t dmpGetQuantizedAccel(VectorInt16 *v, const uint8_t* packet=0); 00857 uint8_t dmpGetExternalSensorData(int32_t *data, uint16_t size, const uint8_t* packet=0); 00858 uint8_t dmpGetEIS(int32_t *data, const uint8_t* packet=0); 00859 00860 uint8_t dmpGetEuler(float *data, Quaternion *q); 00861 uint8_t dmpGetYawPitchRoll(float *data, Quaternion *q, VectorFloat *gravity); 00862 00863 // Get Floating Point data from FIFO 00864 uint8_t dmpGetAccelFloat(float *data, const uint8_t* packet=0); 00865 uint8_t dmpGetQuaternionFloat(float *data, const uint8_t* packet=0); 00866 00867 uint8_t dmpProcessFIFOPacket(const unsigned char *dmpData); 00868 uint8_t dmpReadAndProcessFIFOPacket(uint8_t numPackets, uint8_t *processed=NULL); 00869 00870 uint8_t dmpSetFIFOProcessedCallback(void (*func) (void)); 00871 00872 uint8_t dmpInitFIFOParam(); 00873 uint8_t dmpCloseFIFO(); 00874 uint8_t dmpSetGyroDataSource(uint8_t source); 00875 uint8_t dmpDecodeQuantizedAccel(); 00876 uint32_t dmpGetGyroSumOfSquare(); 00877 uint32_t dmpGetAccelSumOfSquare(); 00878 void dmpOverrideQuaternion(long *q); 00879 uint16_t dmpGetFIFOPacketSize(); 00880 #endif 00881 00882 // special methods for MotionApps 4.1 implementation 00883 #ifdef MPU6050_INCLUDE_DMP_MOTIONAPPS41 00884 uint8_t *dmpPacketBuffer; 00885 uint16_t dmpPacketSize; 00886 00887 uint8_t dmpInitialize(); 00888 bool dmpPacketAvailable(); 00889 00890 uint8_t dmpSetFIFORate(uint8_t fifoRate); 00891 uint8_t dmpGetFIFORate(); 00892 uint8_t dmpGetSampleStepSizeMS(); 00893 uint8_t dmpGetSampleFrequency(); 00894 int32_t dmpDecodeTemperature(int8_t tempReg); 00895 00896 // Register callbacks after a packet of FIFO data is processed 00897 //uint8_t dmpRegisterFIFORateProcess(inv_obj_func func, int16_t priority); 00898 //uint8_t dmpUnregisterFIFORateProcess(inv_obj_func func); 00899 uint8_t dmpRunFIFORateProcesses(); 00900 00901 // Setup FIFO for various output 00902 uint8_t dmpSendQuaternion(uint_fast16_t accuracy); 00903 uint8_t dmpSendGyro(uint_fast16_t elements, uint_fast16_t accuracy); 00904 uint8_t dmpSendAccel(uint_fast16_t elements, uint_fast16_t accuracy); 00905 uint8_t dmpSendLinearAccel(uint_fast16_t elements, uint_fast16_t accuracy); 00906 uint8_t dmpSendLinearAccelInWorld(uint_fast16_t elements, uint_fast16_t accuracy); 00907 uint8_t dmpSendControlData(uint_fast16_t elements, uint_fast16_t accuracy); 00908 uint8_t dmpSendSensorData(uint_fast16_t elements, uint_fast16_t accuracy); 00909 uint8_t dmpSendExternalSensorData(uint_fast16_t elements, uint_fast16_t accuracy); 00910 uint8_t dmpSendGravity(uint_fast16_t elements, uint_fast16_t accuracy); 00911 uint8_t dmpSendPacketNumber(uint_fast16_t accuracy); 00912 uint8_t dmpSendQuantizedAccel(uint_fast16_t elements, uint_fast16_t accuracy); 00913 uint8_t dmpSendEIS(uint_fast16_t elements, uint_fast16_t accuracy); 00914 00915 // Get Fixed Point data from FIFO 00916 uint8_t dmpGetAccel(int32_t *data, const uint8_t* packet=0); 00917 uint8_t dmpGetAccel(int16_t *data, const uint8_t* packet=0); 00918 uint8_t dmpGetAccel(VectorInt16 *v, const uint8_t* packet=0); 00919 uint8_t dmpGetQuaternion(int32_t *data, const uint8_t* packet=0); 00920 uint8_t dmpGetQuaternion(int16_t *data, const uint8_t* packet=0); 00921 uint8_t dmpGetQuaternion(Quaternion *q, const uint8_t* packet=0); 00922 uint8_t dmpGet6AxisQuaternion(int32_t *data, const uint8_t* packet=0); 00923 uint8_t dmpGet6AxisQuaternion(int16_t *data, const uint8_t* packet=0); 00924 uint8_t dmpGet6AxisQuaternion(Quaternion *q, const uint8_t* packet=0); 00925 uint8_t dmpGetRelativeQuaternion(int32_t *data, const uint8_t* packet=0); 00926 uint8_t dmpGetRelativeQuaternion(int16_t *data, const uint8_t* packet=0); 00927 uint8_t dmpGetRelativeQuaternion(Quaternion *data, const uint8_t* packet=0); 00928 uint8_t dmpGetGyro(int32_t *data, const uint8_t* packet=0); 00929 uint8_t dmpGetGyro(int16_t *data, const uint8_t* packet=0); 00930 uint8_t dmpGetGyro(VectorInt16 *v, const uint8_t* packet=0); 00931 uint8_t dmpGetMag(int16_t *data, const uint8_t* packet=0); 00932 uint8_t dmpSetLinearAccelFilterCoefficient(float coef); 00933 uint8_t dmpGetLinearAccel(int32_t *data, const uint8_t* packet=0); 00934 uint8_t dmpGetLinearAccel(int16_t *data, const uint8_t* packet=0); 00935 uint8_t dmpGetLinearAccel(VectorInt16 *v, const uint8_t* packet=0); 00936 uint8_t dmpGetLinearAccel(VectorInt16 *v, VectorInt16 *vRaw, VectorFloat *gravity); 00937 uint8_t dmpGetLinearAccelInWorld(int32_t *data, const uint8_t* packet=0); 00938 uint8_t dmpGetLinearAccelInWorld(int16_t *data, const uint8_t* packet=0); 00939 uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, const uint8_t* packet=0); 00940 uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, VectorInt16 *vReal, Quaternion *q); 00941 uint8_t dmpGetGyroAndAccelSensor(int32_t *data, const uint8_t* packet=0); 00942 uint8_t dmpGetGyroAndAccelSensor(int16_t *data, const uint8_t* packet=0); 00943 uint8_t dmpGetGyroAndAccelSensor(VectorInt16 *g, VectorInt16 *a, const uint8_t* packet=0); 00944 uint8_t dmpGetGyroSensor(int32_t *data, const uint8_t* packet=0); 00945 uint8_t dmpGetGyroSensor(int16_t *data, const uint8_t* packet=0); 00946 uint8_t dmpGetGyroSensor(VectorInt16 *v, const uint8_t* packet=0); 00947 uint8_t dmpGetControlData(int32_t *data, const uint8_t* packet=0); 00948 uint8_t dmpGetTemperature(int32_t *data, const uint8_t* packet=0); 00949 uint8_t dmpGetGravity(int32_t *data, const uint8_t* packet=0); 00950 uint8_t dmpGetGravity(int16_t *data, const uint8_t* packet=0); 00951 uint8_t dmpGetGravity(VectorInt16 *v, const uint8_t* packet=0); 00952 uint8_t dmpGetGravity(VectorFloat *v, Quaternion *q); 00953 uint8_t dmpGetUnquantizedAccel(int32_t *data, const uint8_t* packet=0); 00954 uint8_t dmpGetUnquantizedAccel(int16_t *data, const uint8_t* packet=0); 00955 uint8_t dmpGetUnquantizedAccel(VectorInt16 *v, const uint8_t* packet=0); 00956 uint8_t dmpGetQuantizedAccel(int32_t *data, const uint8_t* packet=0); 00957 uint8_t dmpGetQuantizedAccel(int16_t *data, const uint8_t* packet=0); 00958 uint8_t dmpGetQuantizedAccel(VectorInt16 *v, const uint8_t* packet=0); 00959 uint8_t dmpGetExternalSensorData(int32_t *data, uint16_t size, const uint8_t* packet=0); 00960 uint8_t dmpGetEIS(int32_t *data, const uint8_t* packet=0); 00961 00962 uint8_t dmpGetEuler(float *data, Quaternion *q); 00963 uint8_t dmpGetYawPitchRoll(float *data, Quaternion *q, VectorFloat *gravity); 00964 00965 // Get Floating Point data from FIFO 00966 uint8_t dmpGetAccelFloat(float *data, const uint8_t* packet=0); 00967 uint8_t dmpGetQuaternionFloat(float *data, const uint8_t* packet=0); 00968 00969 uint8_t dmpProcessFIFOPacket(const unsigned char *dmpData); 00970 uint8_t dmpReadAndProcessFIFOPacket(uint8_t numPackets, uint8_t *processed=NULL); 00971 00972 uint8_t dmpSetFIFOProcessedCallback(void (*func) (void)); 00973 00974 uint8_t dmpInitFIFOParam(); 00975 uint8_t dmpCloseFIFO(); 00976 uint8_t dmpSetGyroDataSource(uint8_t source); 00977 uint8_t dmpDecodeQuantizedAccel(); 00978 uint32_t dmpGetGyroSumOfSquare(); 00979 uint32_t dmpGetAccelSumOfSquare(); 00980 void dmpOverrideQuaternion(long *q); 00981 uint16_t dmpGetFIFOPacketSize(); 00982 #endif 00983 00984 private: 00985 uint8_t devAddr; 00986 uint8_t buffer[14]; 00987 }; 00988 00989 #endif /* _MPU6050_H_ */ 00990
Generated on Wed Jul 13 2022 03:34:51 by 1.7.2