[No.8]繰り返しの技を使いこなそう!〜ライトを順番に点灯

Inquiry-Based Study

小さなものづくりコンピューター「SPACEBLOCK(スペースブロック)」でさまざまな機能を作るために、プログラミングの技を磨いていきましょう。今回は、LEDパネルを使って、 プログラミングの基本技である「繰り返し」を使いますよ!

Elementary School ~ Beginner 35分

必要なもの&準備

左:SPACEBLOCK、右上:LEDパネル、右下:USBケーブル

SPACEBLOCKにLEDパネルを接続する

LEDパネルをSPACEBLOCKに接続します。LEDパネルは、横向きピンソケットに直接つなぐか、ジャンパーワイヤでつないでください。今回は、SPACEBLOCKをパソコンにつないだままプログラムを実行して練習するので、電池ボックスをつなぐ必要はありません。
左:LEDパネルを直接接続、右:LEDパネルをジャンパーワイヤで接続

ジャンパーワイヤを接続する場合、細かい部分は以下の図を参考にしてください。

ジャンパーワイヤでLEDパネルをつなぐ場合接続箇所に注意する

要注意マークを表示する

鮮やかなLEDパネルを、危険を知らせる電光表示パネルにします。まずは「!」マークを1秒表示してみましょう。プログラムは次の図の通りです。
プログラム開始すると1秒(1000ミリ秒)「!」マークが表示されるプログラム

「!」マークが点灯し、1秒経つと消えるプログラムができました。もっと目立たせたいので、このマークを点滅させてみましょう。

マークを点滅させるには?

点滅というのは、「点灯→消灯→点灯→消灯→点灯→消灯→点灯→消灯→点灯→消灯→点灯→消灯→点灯→消灯→」……という状態です。「点灯→消灯→」というパターンを何度も繰り返していますね。

同じパターンの命令を繰り返すのに使うのが、「繰り返し」カテゴリーの[繰り返す]ブロックです。[繰り返す]ブロックは、間にはさんだ命令ブロックをずっと繰り返して実行します。

[繰り返す]ブロックは、間にはさんだプログラムを繰り返す

[プログラム開始]に[繰り返す]ブロックをつなぎ、その内側に次の図の通りプログラムを作成しましょう。

LEDパネルにマークを表示し、1秒止まってLEDを消灯し、1秒止まって最初に戻る

動画で見てみましょう。

繰り返しは、点滅のように、同じパターンを何度も繰り返すときにとても便利です。繰り返したい最小パターンを見つけるのが効率良いプログラムのポイントです。

LEDを1個ずつ順番に点灯させるには?

次に、LEDパネルのライトを1個ずつ順番に点灯させてみましょう。LEDパネルには8×8の合計64個のLEDが並んでいて、これら1個ずつを個別に指定して点灯したり消灯したりすることができます。

ライトの位置を指定して点灯するには、「LED」カテゴリーの[8×8 RGB LED《A10》のx《1》y《1》を《色》に点灯]というブロックを使います。位置は、x座標、y座標で指定します。

LEDの位置はx座標とy座標で指定する

横方向 8個のLEDを順番に点灯させる

まず、LEDパネルの一番上の行だけ、左から順にLEDを点灯させてみましょう。[8×8 RGB LED《A10》のx《1》y《1》を《色》に点灯]ブロックで1個ずつ位置を指定してプログラムを作ると次の図の通りになります。
LEDを1個ずつ指定して1秒毎に点灯させるプログラム

このように、命令ブロックをどんどんつないでも良いのですが、数が増えるとプログラムを作るのがとても大変です。

プログラムを点検すると、同じブロックが繰り返しつながっていて、[8×8 RGB LED《A10》のx《1》y《1》を《色》に点灯]ブロックのx座標の値だけが違います。x座標の値は、順番に1から8まで1ずつ増えていますね。このように、ある値が規則的に変化しながら繰り返しをしている場合、「変数(へんすう)」を使うと効率よくプログラムを作ることができます。

「変数」と繰り返しで効率アップ!

「変数(へんすう)」は、値を入れておくことができる入れ物で、自分で好きな名前をつけられます。変数に入れておく値は、プログラムの途中で入れ替えることができます。

まず、次の図の手順通り新しい変数を作りましょう、名前は「X」とします。

❶「変数」カテゴリーの[変数を追加する…]ボタンをクリック ❷好きな名前を入力して、型は「数字」を選び[作成する]をクリック ❸変数のブロックができる

次に、今作った変数「X」に、最初の値として「1」を入れます。次の図の通り、[プログラム開始]ブロックに[数字《X》に《 》をセット]をつなぎ、1を指定してください。

[数字《X》に《》をセット]ブロックに、数値ブロックをはめて1を指定する

続けて、繰り返しを使って、LEDパネルの一番上の行だけ左から順にLEDを点灯させるプログラムを作成します。次の図の通り、[《8》回繰り返す]ブロックの内側にプログラムを作成してください。

1行目のLEDを左から順に点灯させるプログラム

<プログラムの説明>

❶[8×8 RGB LED《A10》のx《1》y《1》を《色》に点灯]ブロックのx座標の値を変数「X」にします。プログラム実行時に変数「X」に入っている値がx座標になります。

❷変数「X」に、変数「X」に1を足した値を入れます。繰り返すたびに変数「X」に入る値が1ずつ増えます。

変数「X」に入れる値が変化する仕組みを次の図でイメージしてください。

同じプログラムブロックだが、変数「X」の値が繰り返すごとに変わるので毎回違うx座標を指定できる

プログラムを実行すると、1行目の左から順にLEDが8個点灯します。

左から順に1個ずつLEDが点灯する

動画でご覧ください。

全てのLEDを順番に点灯する

さらに、縦方向に次の行も点灯を続けて全てのLEDを順番に点灯させてみましょう。横方向はx座標が1ずつ増えましたが、縦方向はy座標が1ずつ増えます。次の図で、点灯させるLEDの順番とx座標、y座標をイメージしてみてください。
順番に点灯させるとx座標とy座標が規則的に変化する

先ほど作った、最初の行だけ左から順にLEDを点灯させるプログラムをアレンジします。新たに変数「Y」を追加して、次の図の通りプログラムを作りましょう。[《8》回繰り返す]ブロックの内側にさらに[《8》回繰り返す]ブロックを入れます。

全てのLEDを1個ずつ順番に点灯させるプログラム

<プログラムの説明>

❶横方向に8個順にLEDを点灯させるプログラムです。x座標に変数「X」入れ、y座標に新たに作った変数「Y」を指定しています。繰り返すたびに、変数「X」が1ずつ増えます。

❷次に指定するLEDの座標を1行下の左端にするためのプログラムです。繰り返すたびに、変数「X」が1にリセットされ、変数「Y」が1ずつ増えます。

プログラムを実行すると、LEDパネルの左上から順に点灯し右端まで8個点灯すると、次の行の左端からまた順番に点灯します。8行目の右端で終わります。

64個全てのLEDが順番に点灯する

動画でご覧ください。

繰り返しの技は、点滅のように全く同じ命令を繰り返すのにはもちろん、変数を使って値を変えながら効率よく繰り返す命令にも使えます。プログラミングの基本技として覚えておいてくださいね!