我有以下代码可用于连接到 MPU 6050 的 Microbit(在 gy521 板上)
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 代码适应 microbit 打字稿,我已经达到了这一点。我曾认为问题可能是 microbit 打字稿中没有“Wire.requestFrom”,但后来我可以很好地阅读“我是谁”,所以我认为它一定是别的东西。我想也许我的电路板有缺陷,所以我买了另一个 - 结果相同。
我已经仔细阅读了注册地图(https://www.invensense.com/wp-content/uploads/2015/02/MPU-6000-Register-Map1.pdf),但没有什么对我产生影响。
我尝试了其他人的库,但它似乎未维护/可能已损坏(他的示例中引用的“初始化”函数不再存在......复制它并启用“初始化”没有帮助)。
我几乎不知所措。有任何想法吗?
(顺便说一句,SSD1306oled 功能只是写入 LED 屏幕 - 也可以写入串行输出或任何用于调试的东西)