IchigoJam教材として定番の「ナナイロイルミネーション」ですが、micro:bit版(BASIC命令互換版)を作ってみました。
micro:bitのNeopixelには、既に位置と色と明るさを指定して光らせる命令(ブロック)があるのですが、これを使わずにIchigoJamBAISCと同じように、変数でプログラムします。
両方のプログラムを並べてみます。
変数の対応は下記の通りです
IchigoJam | Micro:bit | 説明 |
S | Strings | 文字列による8色分 |
W | W | 待ち時間 IJは1/60s単位、mbは1m単位 |
L | L | 明るさ 0〜255 |
J | J | +は右移動、-は左移動 IJは+-LED数の指定 mbは、+1か-1のみ |
C | C | 色 0〜6 (内部サブルーチンおよび関数にて使用) |
[n][n+1][n+2] | R,G,B | RGB値 IJは配列に位置情報とともに保管 mbは、1LED分のRGB値 |
– | strip | micro:bitのみで必要。Neopixelを定義する構造体変数。「最初だけ」ブロックで実行しておく。 strip = neopixel.create(DigitalPin.P0, 8, NeoPixelMode.GRB) |
micro:bitプログラムには、「最初だけ」ブロックにNeopixelで使用するstrip変数を定義しておく必要があります。
IchigoJamプログラムと対比しやすいように、IchigoJamの初期化は、micro:biyプログラムの「ずっと」ブロック内で定義しています。
IchigoJam30行目から60行目は、micro:bitの「ずっと」ブロックの最初に並べています。
IchigoJam80行目のサブルーチン「@SLED」は、micro:bitの関数ブロックに相当します。
「StringsからStripを設定する」
IchigoJam 90行目の「WS.LED8」は、micro:bitのneopixelブロックに相当します。
「設定した色で点灯する」
IchigoJam100行目から130行目は無限ループ構造になっています。micro:bitにはGOTOに相当する命令はないため、「もし 真 なら繰り返し」ブロックを使用して、同様の動きを作ります。
IcihgJam100行目の「WAIT W」は、micro:bitの一時停止ブロックに相当します。
「一時停止する(ミリ秒) W」
IchigoJam110行目のサブルーチン「@JLED」は、micro:bitのneopixelブロックに相当します。
「LED色をJ個分ずらす(ひと回り)」
「設定した色で点灯する」
IchigoJam120行目の「IF BTN() CONT」は、ボタンが押されたら色の動きを停止する動きなのですが、micro:bit側には書き忘れました。
さて