我有以下代码用于连接到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屏幕-最好写入串行输出或用于调试的任何内容)