MPU 6050 в Microbit, может читать «Кто я есть», но нет значений гироскопа, ускорения или температуры (все нули) - PullRequest
0 голосов
/ 29 января 2019

У меня есть следующий код для использования в Microbit, подключающемся к MPU 6050 (на плате 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 для машинописного текста.Я думал, что проблема может заключаться в том, что в машинописном микробите нет «Wire.requestFrom», но тогда я могу читать «кто я», и я думаю, что это должно быть что-то еще.Я подумал, что у меня может быть неисправная плата, поэтому я купил другую - те же результаты.

Я просмотрел карту регистров (https://www.invensense.com/wp-content/uploads/2015/02/MPU-6000-Register-Map1.pdf), но у меня ничего не выскакивает.

Я попробовал чужую библиотеку, но она кажется необслуживаемой / может быть сломанной (его функция "initialize", на которую ссылаются в его примерах, больше не существует ... копирование и включение "initialize" не помогают).

Я в большой растерянности. Есть идеи?

(Кстати, функции SSD1306 с поддержкой только записи на светодиодный экран - с тем же успехом могут записывать на последовательный выход или что-то еще для отладки)

...