MPU 6050(微比特),可以读取“我是谁”,但不能读取陀螺仪,加速度或温度值(全零)

时间:2019-01-29 05:44:09

标签: i2c bbc-microbit

我有以下代码用于连接到MPU 6050(在gy521板上)的Microbit中

basic.showIcon(IconNames.Heart)

SSD1306oled.useBuffer();
const MPU = 0x68;
pins.i2cWriteNumber(MPU, 0x6B, NumberFormat.UInt8LE, true)
pins.i2cWriteNumber(MPU, 0x00, NumberFormat.UInt8LE, false)
basic.pause(10)
pins.i2cWriteNumber(MPU, 0x1B, NumberFormat.UInt8LE, true)
pins.i2cWriteNumber(MPU, 0x00, NumberFormat.UInt8LE, false)
basic.pause(10)
pins.i2cWriteNumber(MPU, 0x1C, NumberFormat.UInt8LE, true)
pins.i2cWriteNumber(MPU, 0x00, NumberFormat.UInt8LE, false)
basic.pause(10)
pins.i2cWriteNumber(MPU, 0x75, NumberFormat.UInt8LE, true)
let who = pins.i2cReadNumber(MPU, NumberFormat.UInt8LE, false)
SSD1306oled.drawTextAt("who: " + who, 8, 0)
SSD1306oled.drawBuffer()
basic.pause(2000)


basic.forever(function () {
    pins.i2cWriteNumber(MPU, 0x41, NumberFormat.UInt8LE, true)
    basic.pause(100)
    let num1 = pins.i2cReadNumber(MPU, NumberFormat.UInt8LE, true)
    let num2 = pins.i2cReadNumber(MPU, NumberFormat.UInt8LE, false)
    SSD1306oled.drawTextAt(1 + "= " + num1, 0, 1)
    SSD1306oled.drawTextAt(2 + "= " + num2, 0, 2)
    SSD1306oled.drawBuffer();
    basic.pause(500);
})

它可以很好地读取“我是谁”寄存器(0x75),但是对于加速度计,陀螺仪甚至温度显示零。通过尝试使Arduino代码适应微比特打字稿,我已经到达了这一点。我曾以为问题可能出在微比特打字稿中没有“ Wire.requestFrom”,但随后我就可以读到“我是谁”了,所以我认为那肯定是另外一回事了。我以为也许我的木板有缺陷,所以我又买了一个-同样的结果。

我仔细阅读了寄存器映射(https://www.invensense.com/wp-content/uploads/2015/02/MPU-6000-Register-Map1.pdf),但没有任何东西对我有利。

我尝试了其他人的库,但是它似乎未维护/可能已损坏(他的示例中引用的“初始化”功能已不复存在...复制并启用“初始化”功能无济于事)

我很茫然。有什么想法吗?

(顺便说一句,SSD1306oled功能只需写入LED屏幕-最好写入串行输出或用于调试的任何内容)

0 个答案:

没有答案