Java Arduino MPU6050传感器不使用来自Arduino的代码';s网站

Java Arduino MPU6050传感器不使用来自Arduino的代码';s网站,java,arduino,Java,Arduino,我在串行监视器中反复得到以下信息: AcX=-1 | AcY=-1 | AcZ=-1 | Tmp=36.53 | GyX=-1 | GyY=-1 | GyZ=-1 我使用的代码如下: //MPU-6050简短示例草图 //由Arduino用户JohnChi编写 //2014年8月17日 //公共领域 #包括 常量int MPU=0x68;//MPU-6050的I2C地址 int16_t AcX、AcY、AcZ、Tmp、GyX、GyY、GyZ; 无效设置(){ Wire.begin(); 导线起始

我在串行监视器中反复得到以下信息: AcX=-1 | AcY=-1 | AcZ=-1 | Tmp=36.53 | GyX=-1 | GyY=-1 | GyZ=-1

我使用的代码如下:

//MPU-6050简短示例草图
//由Arduino用户JohnChi编写
//2014年8月17日
//公共领域
#包括
常量int MPU=0x68;//MPU-6050的I2C地址
int16_t AcX、AcY、AcZ、Tmp、GyX、GyY、GyZ;
无效设置(){
Wire.begin();
导线起始传输(MPU);
Wire.write(0x6B);//压水堆管理1寄存器
Wire.write(0);//设置为零(唤醒MPU-6050)
线端传输(真);
Serial.begin(9600);
}
void循环(){
导线起始传输(MPU);
Wire.write(0x3B);//从寄存器0x3B(ACCEL_XOUT_H)开始
线端传输(假);
requestFrom(MPU,14,true);//请求总共14个寄存器

AcX=Wire.read()首先,我将时钟设置为X陀螺仪振荡器,而不是内部振荡器(正如MPU6050数据表上建议的那样),因此

然而,在我的项目中,我写了更多的初始化…我建议你这样做

  • 编写一些函数来写入/读取I2C接口上的位、字节和字,因为您需要它们
  • 写入函数以获取和设置MPU6050中寄存器的重要部分
  • 编写更复杂的函数
  • 示例:

    // I2C interface
    bool i2c_writeBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t* data)
    {
        Wire.beginTransmission(devAddr);
        Wire.write((uint8_t) regAddr); // send address
    
        for (uint8_t i = 0; i < length; i++)
        {
            Wire.write((uint8_t) data[i]);
        }
        return (Wire.endTransmission() == 0);
    }
    
    // Simple function
    int16_t mpu6050_getAccelerationX() {
        i2c_readBytes(MPU6050_ADDRESS, MPU6050_RA_ACCEL_XOUT_H, 2, rwBuffer);
        return (((int16_t)rwBuffer[0]) << 8) | rwBuffer[1];
    }
    
    // Complex function
    void mpu6050_initialize()
    {
        mpu6050_reset();
        delay(100);
        mpu6050_setClockSource(MPU6050_CLOCK_PLL_XGYRO);
        mpu6050_setSleepEnabled(false);
        mpu6050_setWakeCycleEnabled(false);
        mpu6050_switchSPIEnabled(false);
        mpu6050_setI2CMasterModeEnabled(false);
        mpu6050_setFIFOEnabled(false);
        delay(100);
    
        mpu6050_setRate(7); // 1kHz scan freq
        mpu6050_setDLPFMode(MPU6050_DLPF_BW_256);
        mpu6050_setFullScaleGyroRange(MPU6050_GYRO_FS_250);
        mpu6050_setFullScaleAccelRange(MPU6050_ACCEL_FS_2);
        mpu6050_setInterruptMode(MPU6050_INTMODE_ACTIVEHIGH);
        mpu6050_setInterruptDrive(MPU6050_INTDRV_PUSHPULL);
        mpu6050_setInterruptLatch(MPU6050_INTLATCH_WAITCLEAR);
        mpu6050_setInterruptLatchClear(MPU6050_INTCLEAR_ANYREAD);
        mpu6050_setFSyncInterruptEnabled(0);
        mpu6050_setI2CBypassEnabled(0);
        mpu6050_setClockOutputEnabled(0);
        mpu6050_setIntEnabled(MPU6050_INTERRUPT_MASK_DATA_RDY_BIT); // Interrupt when data ready
    }
    
    //I2C接口
    bool i2c_写入字节(uint8_t devAddr、uint8_t regAddr、uint8_t length、uint8_t*数据)
    {
    线路开始传输(devAddr);
    Wire.write((uint8_t)regAddr);//发送地址
    对于(uint8_t i=0;ireturn((int16_t)rwBuffer[0])首先,我将时钟设置为X陀螺仪振荡器,而不是内部振荡器(如MPU6050数据表上所建议的),因此

    然而,在我的项目中,我写了更多的初始化…我建议你这样做

  • 编写一些函数来写入/读取I2C接口上的位、字节和字,因为您需要它们
  • 写入函数以获取和设置MPU6050中寄存器的重要部分
  • 编写更复杂的函数
  • 示例:

    // I2C interface
    bool i2c_writeBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t* data)
    {
        Wire.beginTransmission(devAddr);
        Wire.write((uint8_t) regAddr); // send address
    
        for (uint8_t i = 0; i < length; i++)
        {
            Wire.write((uint8_t) data[i]);
        }
        return (Wire.endTransmission() == 0);
    }
    
    // Simple function
    int16_t mpu6050_getAccelerationX() {
        i2c_readBytes(MPU6050_ADDRESS, MPU6050_RA_ACCEL_XOUT_H, 2, rwBuffer);
        return (((int16_t)rwBuffer[0]) << 8) | rwBuffer[1];
    }
    
    // Complex function
    void mpu6050_initialize()
    {
        mpu6050_reset();
        delay(100);
        mpu6050_setClockSource(MPU6050_CLOCK_PLL_XGYRO);
        mpu6050_setSleepEnabled(false);
        mpu6050_setWakeCycleEnabled(false);
        mpu6050_switchSPIEnabled(false);
        mpu6050_setI2CMasterModeEnabled(false);
        mpu6050_setFIFOEnabled(false);
        delay(100);
    
        mpu6050_setRate(7); // 1kHz scan freq
        mpu6050_setDLPFMode(MPU6050_DLPF_BW_256);
        mpu6050_setFullScaleGyroRange(MPU6050_GYRO_FS_250);
        mpu6050_setFullScaleAccelRange(MPU6050_ACCEL_FS_2);
        mpu6050_setInterruptMode(MPU6050_INTMODE_ACTIVEHIGH);
        mpu6050_setInterruptDrive(MPU6050_INTDRV_PUSHPULL);
        mpu6050_setInterruptLatch(MPU6050_INTLATCH_WAITCLEAR);
        mpu6050_setInterruptLatchClear(MPU6050_INTCLEAR_ANYREAD);
        mpu6050_setFSyncInterruptEnabled(0);
        mpu6050_setI2CBypassEnabled(0);
        mpu6050_setClockOutputEnabled(0);
        mpu6050_setIntEnabled(MPU6050_INTERRUPT_MASK_DATA_RDY_BIT); // Interrupt when data ready
    }
    
    //I2C接口
    bool i2c_写入字节(uint8_t devAddr、uint8_t regAddr、uint8_t length、uint8_t*数据)
    {
    线路开始传输(devAddr);
    Wire.write((uint8_t)regAddr);//发送地址
    对于(uint8_t i=0;i返回(((int16_t)rwBuffer[0])这是一个焊接错误


    它与上面的代码完美配合。

    这是一个焊接错误

    它与上面的代码完美配合

    // I2C interface
    bool i2c_writeBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t* data)
    {
        Wire.beginTransmission(devAddr);
        Wire.write((uint8_t) regAddr); // send address
    
        for (uint8_t i = 0; i < length; i++)
        {
            Wire.write((uint8_t) data[i]);
        }
        return (Wire.endTransmission() == 0);
    }
    
    // Simple function
    int16_t mpu6050_getAccelerationX() {
        i2c_readBytes(MPU6050_ADDRESS, MPU6050_RA_ACCEL_XOUT_H, 2, rwBuffer);
        return (((int16_t)rwBuffer[0]) << 8) | rwBuffer[1];
    }
    
    // Complex function
    void mpu6050_initialize()
    {
        mpu6050_reset();
        delay(100);
        mpu6050_setClockSource(MPU6050_CLOCK_PLL_XGYRO);
        mpu6050_setSleepEnabled(false);
        mpu6050_setWakeCycleEnabled(false);
        mpu6050_switchSPIEnabled(false);
        mpu6050_setI2CMasterModeEnabled(false);
        mpu6050_setFIFOEnabled(false);
        delay(100);
    
        mpu6050_setRate(7); // 1kHz scan freq
        mpu6050_setDLPFMode(MPU6050_DLPF_BW_256);
        mpu6050_setFullScaleGyroRange(MPU6050_GYRO_FS_250);
        mpu6050_setFullScaleAccelRange(MPU6050_ACCEL_FS_2);
        mpu6050_setInterruptMode(MPU6050_INTMODE_ACTIVEHIGH);
        mpu6050_setInterruptDrive(MPU6050_INTDRV_PUSHPULL);
        mpu6050_setInterruptLatch(MPU6050_INTLATCH_WAITCLEAR);
        mpu6050_setInterruptLatchClear(MPU6050_INTCLEAR_ANYREAD);
        mpu6050_setFSyncInterruptEnabled(0);
        mpu6050_setI2CBypassEnabled(0);
        mpu6050_setClockOutputEnabled(0);
        mpu6050_setIntEnabled(MPU6050_INTERRUPT_MASK_DATA_RDY_BIT); // Interrupt when data ready
    }