Академический Документы
Профессиональный Документы
Культура Документы
h"
mpu6050.devAddr = address;
void MPU6050_initialize() {
MPU6050_setClockSource(MPU6050_CLOCK_PLL_XGYRO);
MPU6050_setFullScaleGyroRange(MPU6050_GYRO_FS_250);
MPU6050_setFullScaleAccelRange(MPU6050_ACCEL_FS_2);
bool MPU6050_testConnection() {
uint8_t MPU6050_getAuxVDDIOLevel() {
return mpu6050.buffer[0];
uint8_t MPU6050_getRate() {
return mpu6050.buffer[0];
}
uint8_t MPU6050_getExternalFrameSync() {
return mpu6050.buffer[0];
uint8_t MPU6050_getDLPFMode() {
return mpu6050.buffer[0];
uint8_t MPU6050_getFullScaleGyroRange() {
I2Cdev_readBits(mpu6050.devAddr, MPU6050_RA_GYRO_CONFIG, MPU6050_GCONFIG_FS_SEL_BIT,
MPU6050_GCONFIG_FS_SEL_LENGTH, mpu6050.buffer);
return mpu6050.buffer[0];
bool MPU6050_getAccelXSelfTest() {
return mpu6050.buffer[0];
bool MPU6050_getAccelYSelfTest() {
return mpu6050.buffer[0];
bool MPU6050_getAccelZSelfTest() {
return mpu6050.buffer[0];
uint8_t MPU6050_getFullScaleAccelRange() {
I2Cdev_readBits(mpu6050.devAddr, MPU6050_RA_ACCEL_CONFIG,
MPU6050_ACONFIG_AFS_SEL_BIT, MPU6050_ACONFIG_AFS_SEL_LENGTH, mpu6050.buffer);
return mpu6050.buffer[0];
I2Cdev_writeBits(mpu6050.devAddr, MPU6050_RA_ACCEL_CONFIG,
MPU6050_ACONFIG_AFS_SEL_BIT, MPU6050_ACONFIG_AFS_SEL_LENGTH, range);
uint8_t MPU6050_getDHPFMode() {
I2Cdev_readBits(mpu6050.devAddr, MPU6050_RA_ACCEL_CONFIG,
MPU6050_ACONFIG_ACCEL_HPF_BIT, MPU6050_ACONFIG_ACCEL_HPF_LENGTH, mpu6050.buffer);
return mpu6050.buffer[0];
}
void MPU6050_setDHPFMode(uint8_t bandwidth) {
I2Cdev_writeBits(mpu6050.devAddr, MPU6050_RA_ACCEL_CONFIG,
MPU6050_ACONFIG_ACCEL_HPF_BIT, MPU6050_ACONFIG_ACCEL_HPF_LENGTH, bandwidth);
uint8_t MPU6050_getFreefallDetectionThreshold() {
return mpu6050.buffer[0];
uint8_t MPU6050_getFreefallDetectionDuration() {
return mpu6050.buffer[0];
uint8_t MPU6050_getMotionDetectionThreshold() {
return mpu6050.buffer[0];
}
uint8_t MPU6050_getMotionDetectionDuration() {
return mpu6050.buffer[0];
uint8_t MPU6050_getZeroMotionDetectionThreshold() {
return mpu6050.buffer[0];
uint8_t MPU6050_getZeroMotionDetectionDuration() {
bool MPU6050_getTempFIFOEnabled() {
return mpu6050.buffer[0];
bool MPU6050_getXGyroFIFOEnabled() {
return mpu6050.buffer[0];
bool MPU6050_getYGyroFIFOEnabled() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_FIFO_EN, MPU6050_YG_FIFO_EN_BIT,
mpu6050.buffer);
return mpu6050.buffer[0];
bool MPU6050_getZGyroFIFOEnabled() {
return mpu6050.buffer[0];
bool MPU6050_getAccelFIFOEnabled() {
return mpu6050.buffer[0];
}
bool MPU6050_getSlave2FIFOEnabled() {
return mpu6050.buffer[0];
bool MPU6050_getSlave1FIFOEnabled() {
return mpu6050.buffer[0];
bool MPU6050_getSlave0FIFOEnabled() {
return mpu6050.buffer[0];
bool MPU6050_getMultiMasterEnabled() {
return mpu6050.buffer[0];
}
void MPU6050_setMultiMasterEnabled(bool enabled) {
bool MPU6050_getWaitForExternalSensorEnabled() {
return mpu6050.buffer[0];
bool MPU6050_getSlave3FIFOEnabled() {
return mpu6050.buffer[0];
bool MPU6050_getSlaveReadWriteTransitionEnabled() {
return mpu6050.buffer[0];
uint8_t MPU6050_getMasterClockSpeed() {
return mpu6050.buffer[0];
return mpu6050.buffer[0];
return mpu6050.buffer[0];
return mpu6050.buffer[0];
return mpu6050.buffer[0];
return mpu6050.buffer[0];
return mpu6050.buffer[0];
}
uint8_t MPU6050_getSlave4Address() {
return mpu6050.buffer[0];
uint8_t MPU6050_getSlave4Register() {
return mpu6050.buffer[0];
bool MPU6050_getSlave4Enabled() {
return mpu6050.buffer[0];
bool MPU6050_getSlave4InterruptEnabled() {
return mpu6050.buffer[0];
}
bool MPU6050_getSlave4WriteMode() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_I2C_SLV4_CTRL,
MPU6050_I2C_SLV4_REG_DIS_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
I2Cdev_writeBit(mpu6050.devAddr, MPU6050_RA_I2C_SLV4_CTRL,
MPU6050_I2C_SLV4_REG_DIS_BIT, mode);
uint8_t MPU6050_getSlave4MasterDelay() {
I2Cdev_readBits(mpu6050.devAddr, MPU6050_RA_I2C_SLV4_CTRL,
MPU6050_I2C_SLV4_MST_DLY_BIT, MPU6050_I2C_SLV4_MST_DLY_LENGTH, mpu6050.buffer);
return mpu6050.buffer[0];
* @see getSlave4MasterDelay()
* @see MPU6050_RA_I2C_SLV4_CTRL
*/
I2Cdev_writeBits(mpu6050.devAddr, MPU6050_RA_I2C_SLV4_CTRL,
MPU6050_I2C_SLV4_MST_DLY_BIT, MPU6050_I2C_SLV4_MST_DLY_LENGTH, delay);
uint8_t MPU6050_getSlate4InputByte() {
bool MPU6050_getPassthroughStatus() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_I2C_MST_STATUS,
MPU6050_MST_PASS_THROUGH_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
bool MPU6050_getSlave4IsDone() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_I2C_MST_STATUS,
MPU6050_MST_I2C_SLV4_DONE_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
bool MPU6050_getLostArbitration() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_I2C_MST_STATUS,
MPU6050_MST_I2C_LOST_ARB_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
bool MPU6050_getSlave4Nack() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_I2C_MST_STATUS,
MPU6050_MST_I2C_SLV4_NACK_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
bool MPU6050_getSlave3Nack() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_I2C_MST_STATUS,
MPU6050_MST_I2C_SLV3_NACK_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
bool MPU6050_getSlave2Nack() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_I2C_MST_STATUS,
MPU6050_MST_I2C_SLV2_NACK_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
bool MPU6050_getSlave1Nack() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_I2C_MST_STATUS,
MPU6050_MST_I2C_SLV1_NACK_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
bool MPU6050_getSlave0Nack() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_I2C_MST_STATUS,
MPU6050_MST_I2C_SLV0_NACK_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
bool MPU6050_getInterruptMode() {
return mpu6050.buffer[0];
* @see getInterruptMode()
* @see MPU6050_RA_INT_PIN_CFG
* @see MPU6050_INTCFG_INT_LEVEL_BIT
*/
* @see MPU6050_RA_INT_PIN_CFG
* @see MPU6050_INTCFG_INT_OPEN_BIT
*/
bool MPU6050_getInterruptDrive() {
return mpu6050.buffer[0];
* @see getInterruptDrive()
* @see MPU6050_RA_INT_PIN_CFG
* @see MPU6050_INTCFG_INT_OPEN_BIT
*/
* @see MPU6050_RA_INT_PIN_CFG
* @see MPU6050_INTCFG_LATCH_INT_EN_BIT
*/
bool MPU6050_getInterruptLatch() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_INT_PIN_CFG,
MPU6050_INTCFG_LATCH_INT_EN_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
}
/** Set interrupt latch mode.
* @see getInterruptLatch()
* @see MPU6050_RA_INT_PIN_CFG
* @see MPU6050_INTCFG_LATCH_INT_EN_BIT
*/
I2Cdev_writeBit(mpu6050.devAddr, MPU6050_RA_INT_PIN_CFG,
MPU6050_INTCFG_LATCH_INT_EN_BIT, latch);
* @see MPU6050_RA_INT_PIN_CFG
* @see MPU6050_INTCFG_INT_RD_CLEAR_BIT
*/
bool MPU6050_getInterruptLatchClear() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_INT_PIN_CFG,
MPU6050_INTCFG_INT_RD_CLEAR_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
* @see getInterruptLatchClear()
* @see MPU6050_RA_INT_PIN_CFG
* @see MPU6050_INTCFG_INT_RD_CLEAR_BIT
*/
I2Cdev_writeBit(mpu6050.devAddr, MPU6050_RA_INT_PIN_CFG,
MPU6050_INTCFG_INT_RD_CLEAR_BIT, clear);
}
* @see getFSyncInterruptMode()
* @see MPU6050_RA_INT_PIN_CFG
* @see MPU6050_INTCFG_FSYNC_INT_LEVEL_BIT
*/
bool MPU6050_getFSyncInterruptLevel() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_INT_PIN_CFG,
MPU6050_INTCFG_FSYNC_INT_LEVEL_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
* @see getFSyncInterruptMode()
* @see MPU6050_RA_INT_PIN_CFG
* @see MPU6050_INTCFG_FSYNC_INT_LEVEL_BIT
*/
I2Cdev_writeBit(mpu6050.devAddr, MPU6050_RA_INT_PIN_CFG,
MPU6050_INTCFG_FSYNC_INT_LEVEL_BIT, level);
* @see MPU6050_RA_INT_PIN_CFG
* @see MPU6050_INTCFG_FSYNC_INT_EN_BIT
*/
bool MPU6050_getFSyncInterruptEnabled() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_INT_PIN_CFG,
MPU6050_INTCFG_FSYNC_INT_EN_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
* @see getFSyncInterruptEnabled()
* @see MPU6050_RA_INT_PIN_CFG
* @see MPU6050_INTCFG_FSYNC_INT_EN_BIT
*/
I2Cdev_writeBit(mpu6050.devAddr, MPU6050_RA_INT_PIN_CFG,
MPU6050_INTCFG_FSYNC_INT_EN_BIT, enabled);
* When this bit is equal to 1 and I2C_MST_EN (Register 106 bit[5]) is equal to
* auxiliary I2C bus of the MPU-60X0. When this bit is equal to 0, the host
* application processor will not be able to directly access the auxiliary I2C
* bit[5]).
* @see MPU6050_RA_INT_PIN_CFG
* @see MPU6050_INTCFG_I2C_BYPASS_EN_BIT
*/
bool MPU6050_getI2CBypassEnabled() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_INT_PIN_CFG,
MPU6050_INTCFG_I2C_BYPASS_EN_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
}
/** Set I2C bypass enabled status.
* When this bit is equal to 1 and I2C_MST_EN (Register 106 bit[5]) is equal to
* auxiliary I2C bus of the MPU-60X0. When this bit is equal to 0, the host
* application processor will not be able to directly access the auxiliary I2C
* bit[5]).
* @see MPU6050_RA_INT_PIN_CFG
* @see MPU6050_INTCFG_I2C_BYPASS_EN_BIT
*/
I2Cdev_writeBit(mpu6050.devAddr, MPU6050_RA_INT_PIN_CFG,
MPU6050_INTCFG_I2C_BYPASS_EN_BIT, enabled);
* CLKOUT pin. When this bit is equal to 0, the clock output is disabled. For
* Specification document.
* @see MPU6050_RA_INT_PIN_CFG
* @see MPU6050_INTCFG_CLKOUT_EN_BIT
*/
bool MPU6050_getClockOutputEnabled() {
return mpu6050.buffer[0];
}
/** Set reference clock output enabled status.
* CLKOUT pin. When this bit is equal to 0, the clock output is disabled. For
* Specification document.
* @see MPU6050_RA_INT_PIN_CFG
* @see MPU6050_INTCFG_CLKOUT_EN_BIT
*/
I2Cdev_writeBit(mpu6050.devAddr, MPU6050_RA_INT_PIN_CFG,
MPU6050_INTCFG_CLKOUT_EN_BIT, enabled);
// INT_ENABLE register
* Full register byte for all interrupts, for quick reading. Each bit will be
* @see MPU6050_RA_INT_ENABLE
* @see MPU6050_INTERRUPT_FF_BIT
**/
uint8_t MPU6050_getIntEnabled() {
return mpu6050.buffer[0];
* Full register byte for all interrupts, for quick reading. Each bit should be
* set 0 for disabled, 1 for enabled.
* @see getIntFreefallEnabled()
* @see MPU6050_RA_INT_ENABLE
* @see MPU6050_INTERRUPT_FF_BIT
**/
* @see MPU6050_RA_INT_ENABLE
* @see MPU6050_INTERRUPT_FF_BIT
**/
bool MPU6050_getIntFreefallEnabled() {
return mpu6050.buffer[0];
* @see getIntFreefallEnabled()
* @see MPU6050_RA_INT_ENABLE
* @see MPU6050_INTERRUPT_FF_BIT
**/
* @see MPU6050_RA_INT_ENABLE
* @see MPU6050_INTERRUPT_MOT_BIT
**/
bool MPU6050_getIntMotionEnabled() {
return mpu6050.buffer[0];
* @see getIntMotionEnabled()
* @see MPU6050_RA_INT_ENABLE
* @see MPU6050_INTERRUPT_MOT_BIT
**/
* @see MPU6050_RA_INT_ENABLE
* @see MPU6050_INTERRUPT_ZMOT_BIT
**/
bool MPU6050_getIntZeroMotionEnabled() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_INT_ENABLE, MPU6050_INTERRUPT_ZMOT_BIT,
mpu6050.buffer);
return mpu6050.buffer[0];
* @see getIntZeroMotionEnabled()
* @see MPU6050_RA_INT_ENABLE
* @see MPU6050_INTERRUPT_ZMOT_BIT
**/
* @see MPU6050_RA_INT_ENABLE
* @see MPU6050_INTERRUPT_FIFO_OFLOW_BIT
**/
bool MPU6050_getIntFIFOBufferOverflowEnabled() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_INT_ENABLE,
MPU6050_INTERRUPT_FIFO_OFLOW_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
* @see getIntFIFOBufferOverflowEnabled()
* @see MPU6050_RA_INT_ENABLE
* @see MPU6050_INTERRUPT_FIFO_OFLOW_BIT
**/
I2Cdev_writeBit(mpu6050.devAddr, MPU6050_RA_INT_ENABLE,
MPU6050_INTERRUPT_FIFO_OFLOW_BIT, enabled);
* @see MPU6050_RA_INT_ENABLE
* @see MPU6050_INTERRUPT_I2C_MST_INT_BIT
**/
bool MPU6050_getIntI2CMasterEnabled() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_INT_ENABLE,
MPU6050_INTERRUPT_I2C_MST_INT_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
* @see getIntI2CMasterEnabled()
* @see MPU6050_RA_INT_ENABLE
* @see MPU6050_INTERRUPT_I2C_MST_INT_BIT
**/
I2Cdev_writeBit(mpu6050.devAddr, MPU6050_RA_INT_ENABLE,
MPU6050_INTERRUPT_I2C_MST_INT_BIT, enabled);
* This event occurs each time a write operation to all of the sensor registers
* @see MPU6050_RA_INT_ENABLE
* @see MPU6050_INTERRUPT_DATA_RDY_BIT
*/
bool MPU6050_getIntDataReadyEnabled() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_INT_ENABLE,
MPU6050_INTERRUPT_DATA_RDY_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
* @see getIntDataReadyEnabled()
* @see MPU6050_RA_INT_CFG
* @see MPU6050_INTERRUPT_DATA_RDY_BIT
*/
I2Cdev_writeBit(mpu6050.devAddr, MPU6050_RA_INT_ENABLE,
MPU6050_INTERRUPT_DATA_RDY_BIT, enabled);
// INT_STATUS register
* These bits clear to 0 after the register has been read. Very useful
* for getting multiple INT statuses, since each single bit read clears
* @see MPU6050_RA_INT_STATUS
*/
uint8_t MPU6050_getIntStatus() {
return mpu6050.buffer[0];
* This bit automatically sets to 1 when a Free Fall interrupt has been
* generated. The bit clears to 0 after the register has been read.
* @see MPU6050_RA_INT_STATUS
* @see MPU6050_INTERRUPT_FF_BIT
*/
bool MPU6050_getIntFreefallStatus() {
return mpu6050.buffer[0];
* This bit automatically sets to 1 when a Motion Detection interrupt has been
* generated. The bit clears to 0 after the register has been read.
* @see MPU6050_RA_INT_STATUS
* @see MPU6050_INTERRUPT_MOT_BIT
*/
bool MPU6050_getIntMotionStatus() {
return mpu6050.buffer[0];
* been generated. The bit clears to 0 after the register has been read.
* @see MPU6050_RA_INT_STATUS
* @see MPU6050_INTERRUPT_ZMOT_BIT
*/
bool MPU6050_getIntZeroMotionStatus() {
return mpu6050.buffer[0];
* This bit automatically sets to 1 when a Free Fall interrupt has been
* generated. The bit clears to 0 after the register has been read.
* @see MPU6050_RA_INT_STATUS
* @see MPU6050_INTERRUPT_FIFO_OFLOW_BIT
*/
bool MPU6050_getIntFIFOBufferOverflowStatus() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_INT_STATUS,
MPU6050_INTERRUPT_FIFO_OFLOW_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
bool MPU6050_getIntI2CMasterStatus() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_INT_STATUS,
MPU6050_INTERRUPT_I2C_MST_INT_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
* generated. The bit clears to 0 after the register has been read.
* @see MPU6050_RA_INT_STATUS
* @see MPU6050_INTERRUPT_DATA_RDY_BIT
*/
bool MPU6050_getIntDataReadyStatus() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_INT_STATUS,
MPU6050_INTERRUPT_DATA_RDY_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
void MPU6050_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) {
void MPU6050_getMotion6(int16_t* ax, int16_t* ay, int16_t* az, int16_t* gx, int16_t* gy, int16_t* gz) {
}
void MPU6050_getAcceleration(int16_t* x, int16_t* y, int16_t* z) {
int16_t MPU6050_getAccelerationX() {
int16_t MPU6050_getAccelerationY() {
* @see getMotion6()
* @see MPU6050_RA_ACCEL_ZOUT_H
*/
int16_t MPU6050_getAccelerationZ() {
// TEMP_OUT_* registers
int16_t MPU6050_getTemperature() {
* @see getMotion6()
* @see MPU6050_RA_GYRO_XOUT_H
*/
int16_t MPU6050_getRotationX() {
* @see getMotion6()
* @see MPU6050_RA_GYRO_YOUT_H
*/
int16_t MPU6050_getRotationY() {
* @see getMotion6()
* @see MPU6050_RA_GYRO_ZOUT_H
*/
int16_t MPU6050_getRotationZ() {
return mpu6050.buffer[0];
* @see getExternalSensorByte()
*/
/** Read double word (4 bytes) from external sensor data registers.
* @see getExternalSensorByte()
*/
// MOT_DETECT_STATUS register
* @see MPU6050_RA_MOT_DETECT_STATUS
* @see MPU6050_MOTION_MOT_XNEG_BIT
*/
bool MPU6050_getXNegMotionDetected() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_MOT_DETECT_STATUS,
MPU6050_MOTION_MOT_XNEG_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
bool MPU6050_getXPosMotionDetected() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_MOT_DETECT_STATUS,
MPU6050_MOTION_MOT_XPOS_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
bool MPU6050_getYNegMotionDetected() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_MOT_DETECT_STATUS,
MPU6050_MOTION_MOT_YNEG_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
bool MPU6050_getYPosMotionDetected() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_MOT_DETECT_STATUS,
MPU6050_MOTION_MOT_YPOS_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
bool MPU6050_getZNegMotionDetected() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_MOT_DETECT_STATUS,
MPU6050_MOTION_MOT_ZNEG_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
bool MPU6050_getZPosMotionDetected() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_MOT_DETECT_STATUS,
MPU6050_MOTION_MOT_ZPOS_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
bool MPU6050_getZeroMotionDetected() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_MOT_DETECT_STATUS,
MPU6050_MOTION_MOT_ZRMOT_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
}
void MPU6050_setSlaveOutputByte(uint8_t num, uint8_t data) {
bool MPU6050_getExternalShadowDelayEnabled() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_I2C_MST_DELAY_CTRL,
MPU6050_DELAYCTRL_DELAY_ES_SHADOW_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
I2Cdev_writeBit(mpu6050.devAddr, MPU6050_RA_I2C_MST_DELAY_CTRL,
MPU6050_DELAYCTRL_DELAY_ES_SHADOW_BIT, enabled);
return mpu6050.buffer[0];
}
void MPU6050_resetGyroscopePath() {
I2Cdev_writeBit(mpu6050.devAddr, MPU6050_RA_SIGNAL_PATH_RESET,
MPU6050_PATHRESET_GYRO_RESET_BIT, true);
void MPU6050_resetAccelerometerPath() {
I2Cdev_writeBit(mpu6050.devAddr, MPU6050_RA_SIGNAL_PATH_RESET,
MPU6050_PATHRESET_ACCEL_RESET_BIT, true);
void MPU6050_resetTemperaturePath() {
I2Cdev_writeBit(mpu6050.devAddr, MPU6050_RA_SIGNAL_PATH_RESET,
MPU6050_PATHRESET_TEMP_RESET_BIT, true);
uint8_t MPU6050_getAccelerometerPowerOnDelay() {
I2Cdev_readBits(mpu6050.devAddr, MPU6050_RA_MOT_DETECT_CTRL,
MPU6050_DETECT_ACCEL_ON_DELAY_BIT, MPU6050_DETECT_ACCEL_ON_DELAY_LENGTH,
mpu6050.buffer);
return mpu6050.buffer[0];
I2Cdev_writeBits(mpu6050.devAddr, MPU6050_RA_MOT_DETECT_CTRL,
MPU6050_DETECT_ACCEL_ON_DELAY_BIT, MPU6050_DETECT_ACCEL_ON_DELAY_LENGTH, delay);
uint8_t MPU6050_getFreefallDetectionCounterDecrement() {
I2Cdev_readBits(mpu6050.devAddr, MPU6050_RA_MOT_DETECT_CTRL,
MPU6050_DETECT_FF_COUNT_BIT, MPU6050_DETECT_FF_COUNT_LENGTH, mpu6050.buffer);
return mpu6050.buffer[0];
I2Cdev_writeBits(mpu6050.devAddr, MPU6050_RA_MOT_DETECT_CTRL,
MPU6050_DETECT_FF_COUNT_BIT, MPU6050_DETECT_FF_COUNT_LENGTH, decrement);
uint8_t MPU6050_getMotionDetectionCounterDecrement() {
I2Cdev_readBits(mpu6050.devAddr, MPU6050_RA_MOT_DETECT_CTRL,
MPU6050_DETECT_MOT_COUNT_BIT, MPU6050_DETECT_MOT_COUNT_LENGTH, mpu6050.buffer);
return mpu6050.buffer[0];
I2Cdev_writeBits(mpu6050.devAddr, MPU6050_RA_MOT_DETECT_CTRL,
MPU6050_DETECT_MOT_COUNT_BIT, MPU6050_DETECT_MOT_COUNT_LENGTH, decrement);
bool MPU6050_getFIFOEnabled() {
return mpu6050.buffer[0];
}
bool MPU6050_getI2CMasterModeEnabled() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_USER_CTRL,
MPU6050_USERCTRL_I2C_MST_EN_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
I2Cdev_writeBit(mpu6050.devAddr, MPU6050_RA_USER_CTRL,
MPU6050_USERCTRL_I2C_MST_EN_BIT, enabled);
void MPU6050_resetFIFO() {
I2Cdev_writeBit(mpu6050.devAddr, MPU6050_RA_USER_CTRL,
MPU6050_USERCTRL_FIFO_RESET_BIT, true);
void MPU6050_resetI2CMaster() {
I2Cdev_writeBit(mpu6050.devAddr, MPU6050_RA_USER_CTRL,
MPU6050_USERCTRL_I2C_MST_RESET_BIT, true);
void MPU6050_resetSensors() {
I2Cdev_writeBit(mpu6050.devAddr, MPU6050_RA_USER_CTRL,
MPU6050_USERCTRL_SIG_COND_RESET_BIT, true);
}
void MPU6050_reset() {
I2Cdev_writeBit(mpu6050.devAddr, MPU6050_RA_PWR_MGMT_1,
MPU6050_PWR1_DEVICE_RESET_BIT, true);
bool MPU6050_getSleepEnabled() {
return mpu6050.buffer[0];
bool MPU6050_getWakeCycleEnabled() {
return mpu6050.buffer[0];
bool MPU6050_getTempSensorEnabled() {
uint8_t MPU6050_getClockSource() {
return mpu6050.buffer[0];
uint8_t MPU6050_getWakeFrequency() {
I2Cdev_readBits(mpu6050.devAddr, MPU6050_RA_PWR_MGMT_2,
MPU6050_PWR2_LP_WAKE_CTRL_BIT, MPU6050_PWR2_LP_WAKE_CTRL_LENGTH, mpu6050.buffer);
return mpu6050.buffer[0];
I2Cdev_writeBits(mpu6050.devAddr, MPU6050_RA_PWR_MGMT_2,
MPU6050_PWR2_LP_WAKE_CTRL_BIT, MPU6050_PWR2_LP_WAKE_CTRL_LENGTH, frequency);
}
bool MPU6050_getStandbyXAccelEnabled() {
return mpu6050.buffer[0];
bool MPU6050_getStandbyYAccelEnabled() {
return mpu6050.buffer[0];
bool MPU6050_getStandbyZAccelEnabled() {
return mpu6050.buffer[0];
}
void MPU6050_setStandbyZAccelEnabled(bool enabled) {
bool MPU6050_getStandbyXGyroEnabled() {
return mpu6050.buffer[0];
bool MPU6050_getStandbyYGyroEnabled() {
return mpu6050.buffer[0];
bool MPU6050_getStandbyZGyroEnabled() {
// FIFO_COUNT* registers
uint16_t MPU6050_getFIFOCount() {
uint8_t MPU6050_getFIFOByte() {
return mpu6050.buffer[0];
}
uint8_t MPU6050_getDeviceID() {
return mpu6050.buffer[0];
uint8_t MPU6050_getOTPBankValid() {
return mpu6050.buffer[0];
int8_t MPU6050_getXGyroOffsetTC() {
return mpu6050.buffer[0];
int8_t MPU6050_getYGyroOffsetTC() {
return mpu6050.buffer[0];
int8_t MPU6050_getZGyroOffsetTC() {
return mpu6050.buffer[0];
int8_t MPU6050_getXFineGain() {
int8_t MPU6050_getYFineGain() {
return mpu6050.buffer[0];
int8_t MPU6050_getZFineGain() {
return mpu6050.buffer[0];
int16_t MPU6050_getXAccelOffset() {
I2Cdev_readBytes(mpu6050.devAddr, MPU6050_RA_XA_OFFS_H, 2, mpu6050.buffer);
int16_t MPU6050_getYAccelOffset() {
int16_t MPU6050_getZAccelOffset() {
}
int16_t MPU6050_getXGyroOffset() {
int16_t MPU6050_getYGyroOffset() {
int16_t MPU6050_getZGyroOffset() {
}
bool MPU6050_getIntPLLReadyEnabled() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_INT_ENABLE,
MPU6050_INTERRUPT_PLL_RDY_INT_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
I2Cdev_writeBit(mpu6050.devAddr, MPU6050_RA_INT_ENABLE,
MPU6050_INTERRUPT_PLL_RDY_INT_BIT, enabled);
bool MPU6050_getIntDMPEnabled() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_INT_ENABLE,
MPU6050_INTERRUPT_DMP_INT_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
I2Cdev_writeBit(mpu6050.devAddr, MPU6050_RA_INT_ENABLE,
MPU6050_INTERRUPT_DMP_INT_BIT, enabled);
bool MPU6050_getDMPInt5Status() {
return mpu6050.buffer[0];
bool MPU6050_getDMPInt4Status() {
return mpu6050.buffer[0];
}
bool MPU6050_getDMPInt3Status() {
return mpu6050.buffer[0];
bool MPU6050_getDMPInt2Status() {
return mpu6050.buffer[0];
bool MPU6050_getDMPInt1Status() {
return mpu6050.buffer[0];
bool MPU6050_getDMPInt0Status() {
return mpu6050.buffer[0];
bool MPU6050_getIntPLLReadyStatus() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_INT_STATUS,
MPU6050_INTERRUPT_PLL_RDY_INT_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
bool MPU6050_getIntDMPStatus() {
I2Cdev_readBit(mpu6050.devAddr, MPU6050_RA_INT_STATUS,
MPU6050_INTERRUPT_DMP_INT_BIT, mpu6050.buffer);
return mpu6050.buffer[0];
bool MPU6050_getDMPEnabled() {
return mpu6050.buffer[0];
void MPU6050_resetDMP() {
I2Cdev_writeBit(mpu6050.devAddr, MPU6050_RA_USER_CTRL,
MPU6050_USERCTRL_DMP_RESET_BIT, true);
}
void MPU6050_setMemoryStartAddress(uint8_t address) {
uint8_t MPU6050_readMemoryByte() {
return mpu6050.buffer[0];
MPU6050_setMemoryStartAddress(address);
uint8_t chunkSize;
chunkSize = MPU6050_DMP_MEMORY_CHUNK_SIZE;
i += chunkSize;
address += chunkSize;
if (i < dataSize) {
if (address == 0) bank++;
MPU6050_setMemoryStartAddress(address);
MPU6050_setMemoryStartAddress(address);
uint8_t chunkSize;
uint8_t *verifyBuffer;
uint8_t *progBuffer;
uint16_t i;
uint8_t j;
if (useProgMem) {
} else {
MPU6050_setMemoryStartAddress(address);
Serial.print("\n");
free(verifyBuffer);
if (useProgMem) free(progBuffer);
i += chunkSize;
// uint8_t automatically wraps to 0 at 256
address += chunkSize;
if (i < dataSize) {
if (address == 0) bank++;
MPU6050_setMemoryStartAddress(address);
if (verify) free(verifyBuffer);
if (useProgMem) free(progBuffer);
return true;
uint16_t i, j;
if (useProgMem) {
if (useProgMem) {
} else {
bank = data[i++];
offset = data[i++];
length = data[i++];
if (length > 0) {
if (useProgMem) {
} else {
i += length;
} else {
if (useProgMem) {
} else {
special = data[i++];
if (special == 0x01) {
//setIntZeroMotionEnabled(true);
//setIntFIFOBufferOverflowEnabled(true);
//setIntDMPEnabled(true);
success = true;
} else {
success = false;
if (!success) {
if (useProgMem) free(progBuffer);
return false; // uh oh
if (useProgMem) free(progBuffer);
return true;
uint8_t MPU6050_getDMPConfig1() {
return mpu6050.buffer[0];
uint8_t MPU6050_getDMPConfig2() {
return mpu6050.buffer[0];