本記事の内容はこちらに移動しました!
↓
さらに新たにゲーム「ターゲットダッシュ」を公開しました!
microbitには5×5のLEDマトリックスが内蔵されています。
このLEDを使って、数字や文字を表現することができます。
基本 -> アイコンを表示
基本 -> 文字列を表示
これとは別に、自分で指定したポイントの点灯制御を行うこともできます!
LED -> 点灯 x0 y0
これを使って、
- 前回のmicrobitボタン制御で学習した変数の復習 -> 振り返る場合はこちら
- フラグ(ブロックリーの鳥でやりました)の学習 -> 振り返る場合はこちら
をおこないます!
LEDマトリックス
LEDマトリックスはx方向(=左右方向)、y方向(=上下方向)に番号が割り当てられています。
マトリックスは行列(ぎょうれつ)と言って、順序立てて整理したり組み立てたりするときに使います
左上が始点でx=0, y=0です。
右上はx=4, y=0です。
左下はx=0, y=4です。
じゃあ右下のxとyはいくつですか?先生に聞いてみましょう。
確認したら次に行きましょ。
1ポイントずつ点灯させる
LED -> 点灯 x0 y0
を、ずっとブロックの中に入れてプログラムを書きこんでみましょう。
左上だけが点灯しましたか?
では、その右のx=1, y = 0を点灯させてみましょう。
LED -> 点灯 x0 y0
LED -> 点灯 x1 y0
それができたら、右下のLEDを点灯させましょう。
LED -> 点灯 x0 y0
LED -> 点灯 x1 y0
LED -> 点灯 x4 y4
いま、左上と、その右、あと右下の3つのLEDが点灯しているはずです。
もしうまくいかなかったら、先生に確認してもらいましょう!
完成イメージ
さきに完成イメージを見てみましょう。この動画のように点灯させるプログラムを作ります。
どういう動きをしているでしょうか、ノートに書いてみましょう。
できたら先生に確認してもらってくださいね!
OKをもらったらプログラムを実際に作ってみましょう!
やること1:上の1行を左から右に順番に点灯させる
まずは左上から右上の1行に対して、順番にLEDを点灯させていきましょう。
ずっとブロックの中に入れていきますよ。
LED -> 点灯 x0 y0
基本 -> 一時停止 ミリ秒(100)
LED -> 点灯 x0 y1
のように、点灯ブロックの間に一時停止ブロックを入れましょう。
プログラムの動きはすごく速いので、一時停止しないと順番に光っているのが目で見て分からないのです。
さあ、がんばって!
やること2:変数+繰り返しで「やること1」を処理する
おそらくやること①で作ったあなたのプログラムはこんな感じになっているはずです。
LED -> 点灯 x0 y1
基本 -> 一時停止 ミリ秒(100)
LED -> 点灯 x0 y2
基本 -> 一時停止 ミリ秒(100)
LED -> 点灯 x0 y3
基本 -> 一時停止 ミリ秒(100)
LED -> 点灯 x0 y4
基本 -> 一時停止 ミリ秒(100)
LED -> 点灯 x0 y5
1つずつ点灯させるのはちょっとめんどくさいです。。。ですよね?
今はyが変わるだけだからまだいいですが、このあとxも変えていくので、これじゃちょっとやってられないです。
それにプログラムは、こうした順番に繰り返す、のような処理が得意です(というかこの目的でプログラムが生まれた)。
繰り返し処理でシンプルにしましょう!
・yの数字を変数にする
・繰り返し処理で変数の値をいじって、点灯処理させる
やることはこうです。
やること2-1:変数を使って点灯する
変数の作り方を忘れた人はここで復習しよう。
作る変数は「ypos」にでもしましょうか。yの位置 = y position = yposです。
試しに、最初だけブロックに下の2つのブロックを入れてみましょう。
変数yposを2にする
点灯 x0 y(ypos)
どこが光りました?左の真ん中が光っていればちゃんとできてます!
もしうまくいかない場合は先生に聞いてみましょう。
ここで大事なのは、変数yposには2が入っていて、
点灯 x0 y(ypos) = 点灯 x0 y2
として点灯した、ということです。
やること2-2:繰り返し処理で処理を繰り返す
さて、では繰り返しさせていきますよ。
ループ -> くりかえし4回
をずっとブロックに入れましょう。
ところでさきほど作った下のプログラムをよく見てみてください。
LED -> 点灯 x0 y1
基本 -> 一時停止 ミリ秒(100)
LED -> 点灯 x0 y2
基本 -> 一時停止 ミリ秒(100)
LED -> 点灯 x0 y3
基本 -> 一時停止 ミリ秒(100)
LED -> 点灯 x0 y4
基本 -> 一時停止 ミリ秒(100)
LED -> 点灯 x0 y5
もしy1とかy2がy(ypos)だったらどうなりますか?
LED -> 点灯 x0 y(ypos)
基本 -> 一時停止 ミリ秒(100)
LED -> 点灯 x0 y(ypos)
基本 -> 一時停止 ミリ秒(100)
LED -> 点灯 x0 y(ypos)
基本 -> 一時停止 ミリ秒(100)
LED -> 点灯 x0 y(ypos)
基本 -> 一時停止 ミリ秒(100)
LED -> 点灯 x0 y(ypos)
となりますよね。これって、
LED -> 点灯 x0 y(ypos)
基本 -> 一時停止 ミリ秒(100)
これを繰り返してると思いませんか?何回繰り返しているか考えて、
ループ -> くりかえし4回
の4の部分を変更してみてください。
そしてくりかえしブロックの中に、下のブロックを入れてやります。
LED -> 点灯 x0 y(ypos)
基本 -> 一時停止 ミリ秒(100)
さて、どうでしょう、上から下に順番にLEDが点灯しましたか?
やること2-3:繰り返し処理の中で変数の値を変更する
やること2-2で繰り返し処理を入れましたが、LED点灯しませんね。。。
これはなぜでしょう?
理由は、変数の値が変わってないから、です。
くりかえしブロックで5回処理を繰り返すときに、yを1から5まで1ずつ増やさないといけません。
そこで変数ブロックを見てみましょう。
変数yposを1だけ増やす
のブロックがありますね。これをさっきの繰り返し処理の最初に入れてやります。
点灯 x0 y(ypos)
一時停止 ミリ秒(100)
変数yposを1だけ増やす
これで動作を確認してみてください、上から下に順番にLEDが点灯しましたか?
順番に点灯しましたよね!?
繰り返し処理の中で変数yposの値が0, 1, 2, 3, 4と変わっていき、そのおかげでLEDの点灯位置が変わりました!
やること3:下の行も同じように点灯させる
さて、やること2によって、左の1行を上から下に順番に点灯させる処理を、繰り返しと変数を使ったシンプルな処理にできました。
つづいて、2行目から5行目も同じように上から下に順番に点灯させる処理をさせてみてください。
上から下に、下端まで点灯したら右の行に移って、また上から下に、がんばりましょう!
ポイントは、下の行に移ったら、最初に
変数yposを0にする
ブロックを入れて、変数yposの値をリセットしてあげることです。
これをやらないとyposはどんどん数字が足されていきます。
やること4:変数+繰り返しで「やること3」を処理する
さて、どうなりましたかね。こんな感じでしょうか。
くりかえし5回
点灯 x0 y(ypos)
一時停止 ミリ秒(100)
変数yposを1だけ増やす
変数yposを0にする
くりかえし5回
点灯 x1 y(ypos)
一時停止 ミリ秒(100)
変数yposを1だけ増やす
変数yposを0にする
くりかえし5回
点灯 x2 y(ypos)
一時停止 ミリ秒(100)
変数yposを1だけ増やす
変数yposを0にする
くりかえし5回
点灯 x3 y(ypos)
一時停止 ミリ秒(100)
変数yposを1だけ増やす
変数yposを0にする
くりかえし5回
点灯 x4 y(ypos)
一時停止 ミリ秒(100)
変数yposを1だけ増やす
これもなんだか、やること2-2、と似た感じがしますね。
点灯ブロックのxが0から4まで増えてるだけで、これも同じ処理が繰り返されていると思いませんか。
くりかえし5回
点灯 x? y(ypos)
一時停止 ミリ秒(100)
変数yposを1だけ増やす
変数yposを0にする
これが何回繰り返されていますか?。。。これも5回ですよね。
だから、こうなります。
くりかえし5回
くりかえし5回
変数yposを1だけ増やす
点灯 x? y(ypos)
一時停止 ミリ秒(100)
変数yposを0にする
くりかえしの中にある、くりかえしを繰り返します。
このように入れ子になっている形のことをネストと言います。
ここで問題になるのは点灯ブロックのxの数です。
変数yposを作った時と同じように、変数xposを作りましょう。xの位置 = x position = xposです。
そして、これまたyposと同じようにxposも繰り返すたびに値を1だけ増やしてあげます。
下のようなプログラムになるはずです。
くりかえし5回
くりかえし5回
点灯 x(xpos) y(ypos)
一時停止 ミリ秒(100)
変数yposを1だけ増やす
変数yposを0にする
変数xposを1だけ増やす
これで5×5の25個が全て点灯したはずです!
よくここまで頑張りました!すごい!!
やること5:これまでの知識を生かして、次は左から右へ
いったんは全部LED点灯したので、下のブロックをプログラムの1番下に追加します。
基本 -> 表示を消す
くりかえし5回
くりかえし5回
点灯 x(xpos) y(ypos)
一時停止 ミリ秒(100)
変数yposを1だけ増やす
変数yposを0にする
変数xposを1だけ増やす
表示を消す
さあ、消えましたかね。
では、これまで知識を生かして、次は左上から左下に順番に、続いて右の列に移って、また左上から左下に順番にLED点灯させてみましょう!
がんばってー!
コメント