micro:bit I2C バス / オンボード加速度計

micro:bit / I2C バス / オンボード加速度計 / I2C バスから 3 軸の 8 ビットデータを読み取る / mbed

#include "MicroBit.h" MicroBit uBit; float raw2g(int raw){ if(0x80 == (0x80 & raw)){ // 0x80 = 0b 1000 0000 raw -= 256; // 256 = 2^8 } return 0.015625 * (float)raw; // 0.015625 = 4/(2^8) } int main(void){ uBit.init(); char f_read[] = {0x2a…

micro:bit / I2C バス / オンボード加速度計 / I2C バスから 3 軸の 10 ビットデータを読み取る / mbed

#include "MicroBit.h" MicroBit uBit; float raw2g(int raw){ if(0x200 == (0x200 & raw)){ // 0x200 = 0b 10 0000 0000 raw -= 1024; // 1024 = 2^10 } return 0.00390625 * (float)raw; // 0.00390625 = 4/(2^10) } int main(void){ uBit.init(); char bu…

micro:bit / I2C バス / オンボード加速度計 / I2C バスから WHO_AM_I レジスタの値を読み取ってみる / mbed

#include "MicroBit.h" MicroBit uBit; int main(void){ uBit.init(); char buf[] = {0x0d}; uBit.i2c.write(0x1d<<1, buf, 1, true); uBit.i2c.read(0x1d<<1, buf, 1); printf("ID %X\n", (int)buf[0]); release_fiber(); return 0; } 実行結果:

micro:bit / I2C バス / オンボード加速度計 / MicroBitAccelerometer オブジェクトから読み取る / mbed

参考: accelerometer - micro:bit runtime #include "MicroBit.h" MicroBit uBit; MicroBitI2C i2c = MicroBitI2C(I2C_SDA0, I2C_SCL0); MicroBitAccelerometer accelerometer = MicroBitAccelerometer(i2c); int main(void){ uBit.init(); //accelerometer.…

micro:bit / I2C バス / オンボード加速度計 / I2C バスから 3 軸の 10 ビットデータを読み取る / MicroPython

from microbit import * #i2c.write(0x1d, bytes([0x2a, 1<<1])) def raw2g(raw): if 0b1000000000 == (0b1000000000 & raw): raw -= 2**10 return 4/(2**10) * raw while True: raw = i2c.read(0x1d, 7) raw_x = (raw[1]<<2)|(raw[2]>>6) raw_y = (raw[3]<<…

micro:bit / I2C バス / オンボード加速度計 / I2C バスから 3 軸の 8 ビットデータを読み取る / MicroPython

from microbit import * i2c.write(0x1d, bytes([0x2a, 1])) def raw2g(raw): if 0b10000000 == (0b10000000 & raw): raw -= 2**8 return 4/(2**8) * raw while True: raw = i2c.read(0x1d, 6) g_x = raw2g(raw[1]) g_y = raw2g(raw[3]) g_z = raw2g(raw[5])…

micro:bit / I2C バス / オンボード加速度計 / I2C バスから x 軸の 8 ビットデータを読み取る / MicroPython

参考: Beginning BBC micro:bit: A Practical Introduction to micro:bit Development, pp.90-95 x 軸だけ読み取ってみる。 ディバイスアドレスは 0x1d である。 8 ビットデータのみ使う場合は CTRL_REG1 レジスタの F_READ ビットをセットしなければならな…

micro:bit / I2C バス / オンボード加速度計 / accelerometer オブジェクトから読み取る / MicroPython

micro:bit は I2C バスに加速度センサー MMA8653FC が接続されている。その値を読み取ってみる。 from microbit import * while True: # 軸ごとに読み取る。 x = accelerometer.get_x() y = accelerometer.get_y() z = accelerometer.get_z() # 3 軸を一度に…