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 軸を一度に…

micro:bit / PWM / サーボを驅動する / mbed

構文: setServoValue(角度° [, 範囲 μs [, センター μs]]) 周期は 20 ms。 角度 0° のときのパルス幅は 500 μs、角度 180° のときのパルス幅は 2500 μs。 範囲のデフォルト値は 2000、センターのデフォルト値は 1500 (MicroBitPin.h に定義してある)。 以上…

micro:bit / PWM / LED をぼわーんと光らせる / mbed

念のためトランジスターでドライブしているが制限抵抗の値をうまく選べば P0 ~ P2 端子は直接ソースまたはシンクとして使えると思う。 #include "MicroBit.h" MicroBit uBit; int main(void){ uBit.init(); int val = 0; // デューティの初期値 int inc = 1…

micro:bit / PWM / デューティを極端に頻繁に切り換えると glitch が出る / mbed

#include "MicroBit.h" MicroBit uBit; int main(void){ uBit.init(); double periodUs = 50.0; double puseWidth1 = 10.0; double puseWidth2 = 40.0; uBit.io.P0.setAnalogValue(int(1023.0*puseWidth1/periodUs)); uBit.io.P0.setAnalogPeriodUs(int(peri…

micro:bit / PWM の設定方法 / MicroPython

無限ループは不要である。 from microbit import * pin0.set_analog_period(1) # Set the period in ms. #pin0.set_analog_period_microseconds(1000) # You can set the period in us. pin0.write_analog(0.33*1023.0) # Set the duty, (int or float)0-102…

micro:bit / PWM の設定方法 / mbed

無限ループは不要である。 #include "MicroBit.h" MicroBit uBit; int main(void){ uBit.init(); uBit.io.P0.setAnalogValue(int(0.5*1023.0)); // 必ず先にデューティ (0 ~ 1023) を設定しておく。 uBit.io.P0.setAnalogPeriod(1); // 周期〔ms〕を設定す…

micro:bit の 5 x 5 LED ディスプレイに 2 桁の数字 (00 ~ 99) を表示する / MicroPython

さきがけて

micro:bit に入力したパルスのパルス幅を測る / GPIO の IN レジスタの変化をポーリング方式で直接読み取る

#include "MicroBit.h" MicroBit uBit; int main(void){ // IN レジスタからは、各 GPIO ラインへの入力信号が H (1) なのか L (0) なのかが読み出せる。 // PIN_CNF[N] レジスタは、特定の GPIO ラインの状態が設定できる。 volatile unsigned int *IN = (u…

micro:bit / マイコンの内部レジスタを操作する / 何かを書き込む / 2 つの端子から同じタイミングで反転パルスを出力する

今度は、反転したパルスを 2 つの端子から同時に出力してみる。 OUTSET レジスタと OUTCLR レジスタとを使えば、複数のビットを同時に H にすること、複数のビットを同時に L にすることができるが、複数のビットの一部だけを H に、一部だけを L に同時に設…

micro:bit / マイコンの内部レジスタを操作する / 何かを書き込む / 2 つの端子から同じタイミングでパルスを出力する

micro:bit の P0、P1 からまったく同じタイミングでパルスを出力してみる。 int main(void){ unsigned int BaseAddress = 0x50000000UL; // GPIO の各種レジスタのベースアドレス // DIRSET は指定のビットだけを出力にセットするレジスタ (指定していないビ…

micro:bit / マイコンの内部レジスタを操作する / 何かを読み取る

データシート:nRF51822 / Bluetooth Low Energy / Products / Home - Ultra Low Power Wireless Solutions from NORDIC SEMICONDUCTOR 例として GPIO の DIR レジスタを読み取ってみる。各 GPIO ラインの入出力の向きを設定するレジスタである。 ベースアド…

micro:bit のイベントを使う 2 / 入力したパルスのパルス幅を測る

ポーリング方式ではなくイベントを利用してパルス幅を測ってみる。 #include "MicroBit.h" MicroBit uBit; // イベントハンドラーを定義する。 void getPulseWidth(MicroBitEvent e){ printf("%d\n\r", (int)e.timestamp); // コールされたらそのときのタイ…

micro:bit のイベントを使う 1 / 入力パルスの立ち上がりでイベントを生成して何かをする

ここでは入力パルスの立ち上がりでイベントを生成してそのときのタイムスタンプを表示してみる。 イベントの使いかたは下のとおりである。 イベント生成時にコールする函数 (イベントハンドラー) を定義しておく。 生成するイベントをメッセージバスに登録し…

micro:bit に入力したパルスのパルス幅を測る / H も L も測る / ポーリング方式

今度は H、L の両方を同時に測ってみる。 #include "MicroBit.h" MicroBit uBit; int pulseIn(int OneZero){ uint32_t start; uint32_t end; uint32_t elapsedTime; while(uBit.io.P0.getDigitalValue() == OneZero){} // H (L) の途中だったら一旦 L (H) に…

micro:bit に入力したパルスのパルス幅を測る / ポーリング方式

SG から micro:bit の P0 端子に方形波を入力してそのパルス幅を測ってみる。10 マイクロ秒くらいまで測れる。 #include "MicroBit.h" MicroBit uBit; int main(void){ uBit.init(); uint32_t start; uint32_t end; uint32_t epalsedTime; while(1){ while(u…

いわゆる busy wait を使う場合

何もしないループのこと。 #include "MicroBit.h" MicroBit uBit; volatile int i; int n = 20; int main(void){ uBit.init(); for(;;){ uBit.io.P0.setDigitalValue(1); for(i = 0; i < n; i++){} uBit.io.P0.setDigitalValue(0); for(i = 0; i < n; i++){}…

mbed の wait_us(マイクロ秒) 函数を使う場合

4 マイクロ秒きざみで増減できる。 #include "MicroBit.h" MicroBit uBit; int t = 21; int main(void){ uBit.init(); for(;;){ uBit.io.P0.setDigitalValue(1); wait_us(t); uBit.io.P0.setDigitalValue(0); wait_us(t); } return 0; }

mbed で MicroBit.h を使う場合 / MicroBit.sleep(ミリ秒)

6 ミリ秒きざみで増減できる。 #include "MicroBit.h" MicroBit uBit; int t = 20; int main(void){ uBit.init(); for(;;){ uBit.io.P0.setDigitalValue(1); uBit.sleep(t); uBit.io.P0.setDigitalValue(0); uBit.sleep(t); } return 0; }

MicroPython で microbit モジュールを使う場合 / microbit.sleep(ミリ秒)

6 ミリ秒きざみで増減できる。 from microbit import * t = 31 while True: pin0.write_digital(1) sleep(t) pin0.write_digital(0) sleep(t)

ディジタル GPIO への 2 つのアクセス方法

MicroBit オブジェクト上に作成された MicroBitPin オブジェクトを使う方法: 普通はこれでよい。 #include "MicroBit.h" MicroBit uBit; int main(void){ uBit.init(); for(;;){ uBit.io.P0.setDigitalValue(1); uBit.io.P0.setDigitalValue(0); } return 0;…

11 個のキーワードで学ぶ統計学入門 11 of 11 / ブートストラップ法

すでに存在しているデータからそのデータと同じ個数だけ無作為に抽出したデータでデータセットをいくつか作る。重複抽出を許容するので、元のデータを並べ替えるのとは異なる。 Calculator の場合: randSamp(リスト, 試行回数, 0) は重複を許容する。これが…

11 個のキーワードで学ぶ統計学入門 10 / 正規乱数

Calculator の場合: 構文: randNorm(平均, 標準偏差 [, 試行回数]) 実行結果: Nspired Lua で実行する場合: function normRand(mean, sigma, trials) local trials = trials or 1 return math.eval(string.format("randNorm(%s, %s, %s)", mean, sigma, tria…

11 個のキーワードで学ぶ統計学入門 9 / 正規分布 (の確率密度函数)

Calculator の場合: 構文: normPdf(x, 平均, 標準偏差) (Pdf は probability density function) 実行結果: Nspired Lua で実行する場合: function normPdf(x, mean, sigma) --return math.eval("normPdf("..x..","..mean..","..sigma..")") return math.eval…

11 個のキーワードで学ぶ統計学入門 7、8 / 線形回帰と最小二乗法

Calculator の場合: 構文: LinRegBx Xリスト, Yリスト (または LinRegMx Xリスト, Yリスト) 実行結果: Nspired Lua で実行する場合: function ols(xlist, ylist) local temp1 = "{"..table.concat(xlist, ",").."}" local temp2 = "{"..table.concat(ylist, …

11 個のキーワードで学ぶ統計学入門 6 / 相関 (correlation)

Calculator の場合: 構文: corrMat(リスト, リスト) 実行結果: Nspired Lua で実行する場合: function corrMat(list1,list2) local temp1 = "{"..table.concat(list1, ",").."}" local temp2 = "{"..table.concat(list2, ",").."}" --return math.eval("corr…