micro:bitに取り付けてあるセンサーを使って、プログラミングをしていきます。
例題では、サンプルコードを載せてありますので、コードを入力して実行結果を確認してください。
課題は例題を応用した問題になっています。例題・練習問題が終了する度に、新しいプロジェクトを立ち上げて、プロジェクト名は問題の番号を書いてください(例:練習1-2)。
micro:bit(マイクロビット)のディスプレイは、5x5のLEDで構成されています。 内部では5x5のマトリックスとしてmicro:bitに接続されています。また、それぞれのLEDは座標として表すことができます。
micro:bit(マイクロビット)の前面に2つのプッシュボタン(A/B)があります。前面のボタンAおよびBは、任意の目的でプログラミングできます。AとBはソフトウェアによってデバウンスされます。「一回押し」、「長押し」、および「A + Bの同時押し」の検出ができます。
ボタンは、反転方式で動作し、プルアップ抵抗により、ボタンを離したときに論理「1」になり、ボタンが押されたときに論理「0」になります。 AボタンとBボタンはどちらも、micro:bit(マイクロビット)のエッジコネクター(GPIOピン)に接続されています。
Aボタンを押すと数が1ずつ増えて表示される(最初は0から始める)
Bボタンを押すと表示されている数から1ずつ減って表示される
[動作イメージ]
Aボタンを押すと数が1ずつ増えて表示される(最初は0から始める)
Bボタンを押すと表示されている数から1ずつ減って表示される
A+Bボタンを押すと0にリセットされる
[動作イメージ]
Aボタンを押すと偶数が順番に表示される(最初は0から始める)
Bボタンを押すと表示されている数から2ずつ減って表示される
A+Bボタンを押すと0にリセットされる
※最初だけ変数xを0とし、xをいくつ増やせば偶数になるのか
Aボタンを押すと奇数が順番に表示される(最初は1から始める)
Bボタンを押すと表示されている数から2ずつ減って表示される
A+Bボタンを押すと1にリセットされる
Aボタンを押すと左から右にLEDが点灯する
Bボタンを押すと右から左にLEDが消灯する
※ヒント:LEDの「点灯」というブロックを使って、座標を変数で表します。
[動作イメージ]
Aボタンを押すと左から右にLEDが点灯する
Bボタンを押すと右から左にLEDが消灯する
A+Bボタンを押すと、全てのLEDが消灯し、変数の値もリセットされる
[動作イメージ]
micro:bit(マイクロビット)は、LEDのディスプレイを光センサーとしても使用しています。
この5x5のLEDマトリックスは、LEDドライブピンの一部を繰り返し入力に切り替え、周囲光レベルにほぼ比例する電圧減衰時間(光の強度が高くなるほど内部容量の放電が急速になり、光の強度が低くなると放電速度は遅くなる。)をサンプリングすることにより、光を検出します。
環境光センサーで取得できる値は 0~255 です。
0:暗い
255:非常に明るい
Aボタンを押すと「光の明るさ」の数値が表示される
Bボタンを押すと、表示が消える
LEDに入る光の量を調節して、数値が変わるか確認してみましょう。
Micro:bitを傾けると、方角の位置を取得することができます。
磁気センサーで取得できる値は、北を基点として時計回りに、0~359です。各方向の値は以下の通りです。
北:0
東:90
南:180
西:270
※ 準備ができていない場合は、-1003を返します。
プログラミングでは、とある条件に当てはまるかどうかによって処理を分けることがあります。「もしも~だったら~する」などの判断のことを条件分岐といいます。Microbitで分岐を作るときは、「もし」というブロックを使っていきます。「もし」ブロックは、「論理」ブロック一覧の中に用意されています。
「もし」ブロックの詳しい使い方は、以下のリンクを参考にしてみてください。
【micro:bit 分岐】プログラムの分かれ道を作ってみよう!
また、磁気センサーで取得する値は、入力ブロック一覧の「方角(゜)」ブロックを使用していきます。
※上手く表示されないときは以下を参考にキャリブレーションを行なってください。
磁気センサーは使用前にキャリブレーション(較正)する必要があります。必要と判断された場合、キャリブレーションプロセスはランタイムソフトウェアによって自動的に開始され、LEDディスプレイに「TILT TO FILL SCREEN」と表示されます。micro:bit本体を傾けながら角度を調整することで、LEDディスプレイのすべてのドットを点灯させると、キャリブレーションが終了です。
※ 文字「TILT TO FILL SCREEN」が画面上をスクロールしている間、キャリブレーションルーチンはバックグラウンドで実行されるため、スクロールが終了する前に傾斜を開始することができます。これにより、少し早くキャリブレーションを終了させることができます。
micro:bit(マイクロビット)は独立した温度センサーを設けているわけではなく、 NRF52アプリケーションプロセッサーのオンボード温度センサーを利用しています。
Aボタンを押したときに、
暑く感じやすい温度(28度超)になった場合、「かなしい顔」を表示。
寒く感じやすい温度(17度未満)になった場合、「びっくり顔」を表示。
過ごしやすい温度(17度〜28度)になった場合、「うれしい顔」を表示。
加速度センサーは、3軸(X,Y,Z)で測定ができ、ハードウェアでの検出(落下検出)、 及びソフトウェアアルゴリズムによる検出(ロゴの向き、シェイクなど)が可能です。
測定する軸については、以下をご参照ください。
x:左右方向(左:-、右:+)
y:前後方向の加速度。(ロゴ方向:-、エッジコネクター方向:+)
z:上下方向の加速度。(下:-、上:+)
絶対値:3つの次元(方向)すべてから得られる加速の強さ。
ボタンスイッチと変数の「応用1」を参考にして作成しなさい
ヒント:計算ブロックの「~を~で割ったあまり」ブロックを上手に使って2段目以降も点灯するようにしてみよう
応用1のプログラムに、LEDランプを25個点灯させたときに、「GAMEOVER」と表示されるように改良しよう
「GAMEOVER」ブロックは、「高度なブロック」→「ゲーム」のところにブロックがあります。
プログラミングでは、同じ処理を自動で繰り返すことを「繰り返し(ループ)処理」といいます
micro:bitには、ループのためのブロックがいくつか用意されています。「ずっと」ブロックもループさせるブロックの1つですが、今回は一定の回数を繰り返すブロックを使ってプログラムを書いていきましょう。
「ループ」から、「くりかえし」 のブロックを選択してきます。この「くりかえし」ブロックは、指定した回数だけループでプログラムを実行することができます。
3列目のLEDを上から順番に0.1秒間で点灯させていきます。
Bボタンを押したら、すべての点灯を消す。
順番に繰り返すときは「ループブロック」を使います
※ヒント:点灯ブロックのx座標を2、y座標を変数にします。その状態で変数を0~4まで繰り返します。
Aボタンを押したら、座標(0,0)のLEDから右下へ順番に0.1秒間で点灯させていきます。
Bボタンを押したら、すべての点灯を消す。
順番に繰り返すときは「ループブロック」を使います