【micro:bit 練習課題】 LEDを使った複雑なプログラミング!

micro:bitでプログラミング
この記事は約9分で読めます。

こんにちは、ナナです。

みんなはここまで色々いろいろなブロックを使って、プログラミングしてきましたね。

実際じっさいのプログラムでは、ブロックをたくさん組み合わせてよりむずかしいプログラムを作ることもあります。

みんなはこれから目的もくてきのプログラムを作るために、どのブロックを組み合わせれば目的のプログラムが実現じつげんできるのかを考える力が必要ひつようになるのです。

この記事きじでは、次のことを学習がくしゅうできます。

この記事で学習できること
  • 座標ざひょうを使ったLEDの点灯てんとう消灯しょうとうの方法
  • 「くりかえし」ブロックと「もし」ブロックの本格的ほんかくてきな使い方の練習れんしゅう

では、makecodeを使った、本格的ほんかくてきなブロックの使い方をまなんでいきましょう。

スポンサー

ちょっと難しい「LED」ブロックの使い方を知ろう

師範しはん!ここまで「もし」ブロックや「くりかえし」ブロックなどの使い方を学んできましたが、本当ほんとうに自分が使いこなせているのか不安ふあんなんです。

たしかに!姉上あねうえ、それはぼくかんじていたんだよ。毎日の修行しゅぎょう手裏剣しゅりけん精度せいど向上こうじょうしているが、「プログラミング」の技術ぎじゅつが上がっているのかがよくわからないんだ。

師範しはん!自分たちをテストしてもらえませんか?

ナナ

うん、うん。2人にここまで基本的きほんてきなブロックの使い方を教えてきたけど、あくまでも基本だからね。実際じっさいに使うためには、もう少しふか知識ちしきが必要となるね。

それじゃあ、テストをする前にちょっとむずかしい「LED」ブロックの使い方を解説かいせつするね。このLEDをあやつるプログラミングを後で作ってもらうよ!

高度な「LEDブロック」がある場所

LEDを光らせるといえば、「基本きほんブロック一覧いちらん」の中にある2つのブロックですね。

みんなはこの2つ以外いがいに、「LEDブロック一覧いちらん」があることにいていますか?

じつはこの中には、プログラミングで本格的ほんかくてき制御せいぎょすることができるLEDのブロックが入っているのです。

LEDブロックを構成する「X」と「Y」の要素

LEDのブロックを見ると「xエックス」「yワイ」というアルファベットの要素ようそがあり、数字すうじ指定していできるかたちになっていますね。

この「x」「y」は、LEDの場所を示す数字になっています。関係性かんけいせいは次の通りです。

「x」は横方向よこほうこう、「y」は縦方向たてほうこう場所ばしょしめしています。つまり「x」「y」の2つの数字すうじがそろうことで、1つのLEDの場所ばしょしめすことになります。

「x」「y」は「0~4」の数字でしめし、2つの数字の組み合わせでLEDの場所ばしょ特定とくていします。

ナナ

この「X」「Y」は算数でグラフの勉強べんきょうをしたことがある人は理解りかいできますね。それと同じですよ。

LEDのブロックの種類

LEDブロックの中で基本きほんとなるのが、次の「点灯てんとう」「消灯しょうとう」「反転はんてん」の3つのブロックです。

「点灯」と「消灯」は、指定していした場所ばしょのLEDをその状態じょうたい変更へんこうします。「反転」は点灯しているなら消灯へ、消灯しているなら点灯へ変化へんかさせます。

「A」スイッチを押すことで、図示ずしした箇所かしょのLEDが点灯てんとうします。

スポンサー

LEDの場所情報を使ったプログラミングの修行コーナー!

ナナ

それじゃあ、このLEDの場所ばしょを使ってプログラムを作ってみようね。パズルゲームだと思っていてみてね。

プログラミングの修行 その1

修行内容:一番上のLEDを順に光らせてみよう!
ナナ

じゃあ、最初さいしょ修行内容しゅぎょうないようだよ。みんな頑張がんばっていてみてね!

修行内容:一番上のLED5つを順に点灯するプログラム
  • プログラム開始と同時に一番上のLEDを順に点灯すること
  • 1秒毎に点灯するLEDを右にずらしていくこと
  • 一番右を点灯したら、次は最初に戻り一番左を点灯すること

繰り返せって指示しじされているわね。ということは「くりかえし」ブロックを使う必要ひつようがありそうだわ…。

繰り返しながら「x」「y」の数をうまく変更へんこうすれば、できそうながするわね。

みんなどうかしら、修行をクリアできたかしら。

「くりかえし」ブロックの数をLEDの「x」として利用することで順に点灯することができるわね。あとは1秒待ってから消灯すればいいわね。

変数「X」を作成し、ループカウンターとして利用します。「X」をLEDの点灯位置として使えば、順に「0」→「1」→「2」→「3」→「4」→「0」・・・と変わりますね。

ナナ

「カウンター付きのくりかえし」ブロックを上手じょうずに使えばける問題もんだいですね。ループカウンターの数を利用りようするんですよ!

プログラミングの修行 その2

修行内容:LED全体を順に光らせてみよう!
ナナ

じゃあ、「修行その1」を少しむずかしくするよ!いてみてね。

修行内容:LED全体を順に点灯するプログラム
  • プログラム開始かいし同時どうじに、左上から下に向かってLEDをじゅんに点灯すること
  • 一番下までいったら、一つ右の上から下に向かってじゅんに点灯すること
  • 秒毎びょうごとに点灯するLEDをずらしていくこと
  • 一番右下を点灯したら、次は最初さいしょに戻り一番左を点灯すること

下方向と右方向に動かすだと…。かえ必要ひつようがあるのはわかるが、いったいどうしたらよいものか、うーん。

そうか!「下方向に繰り返す」「右方向に繰り返す」が2つ組み合わさっているのかっ!わかったぞ!

この修行しゅぎょうのポイントは2つの「くりかえし」ブロックを組み合わせることだね。みんなけたかい? 「X」「Y」のループカウンターを使ってLEDの位置いち順番じゅんばんに変えていけばいいってことだよ。

タネがわかれば、そんなにむずかしくないぞ!よく見てくれよな!

「くりかえし」ブロックの中にもう一つの「くりかえし」ブロックがふくまれていますね。

このようにすることで下方向と右方向へ、じゅんにLEDを点灯させることができます。

ナナ

「くりかえし」の中に「くりかえし」があることを「多重たじゅうループ」と呼びます。プログラミングではよく利用りようされる形なんですよ!

プログラミングの修行 その3

修行内容:一番上のLEDを逆順に光らせてみよう!
ナナ

「修行その1」は左から右に光らせたけど、今度は右から左逆順ぎゃくじゅんに光らせてみよう!できるかな?

修行内容:一番上のLED5つを逆順に点灯するプログラム
  • プログラム開始と同時に一番上のLEDを逆順ぎゃくじゅんに点灯すること
  • 秒毎びょうごとに点灯するLEDを左にずらしていくこと
  • 一番左を点灯したら、次は最初さいしょもどり一番右を点灯すること

修行その1では「ループカウンター」を「X」の位置いち指定していして0~4に順番じゅんばんやしたけど、今度こんどらさなくちゃいけないってことよね。

「ループカウンター」って数をやすことしかできないのにどうすればいいのかしら…。うーん、こまったわ。

LEDを光らせるための場所ばしょは(4,0)→(3,0)→(2,0)→(1,0)→(0,0)のじゅんに点灯するプログラムをすればいいってことね。

ループカウンターは数がじゅんえるけど、それを規則性きそくせい利用りようして点灯する場所を算出さんしゅつすることはできないかしら?

そうよ!発想はっそう逆転ぎゃくてんさせるんだわっ!

この問題は「カウンター付きくりかえし」ブロックと、「四則演算しそくえんざん」ブロックを上手じょうずに組み合わせることでくことができます。

四則演算しそくえんざんとは「+-×÷」の4種類しゅるい演算えんざんのことです。

ナナ

四則演算のどれかを利用りようするんですよ。どれを使えばいいのかわかるかな?

フフフ、師範しはんきましたよ。この意地悪いじわる問題もんだいをね。

やすことでらす、この「なぞなぞ」をかしましたわ。こたえはこれよっ!くらえっ。

「4」からループカウンターの数を引き算することで、「x」の数を順に小さくすることができます。わかりますか?

「x」の位置いちを表す4-「カウンター」の計算結果けいさんけっかは、次のようになります。

「カウンター」変数が0のとき、「x」は4
「カウンター」変数が1のとき、「x」は3
「カウンター」変数が2のとき、「x」は2
「カウンター」変数が3のとき、「x」は1
「カウンター」変数が4のとき、「x」は0

ナナ

これが「数を増やすことで減らすことができる」という「なぞなぞ」の答えですよ。みんなわかったかな。

プログラミングの形はたくさんあるから、このプログラム以外いがいでも目的もくてき動作どうさができているなら大丈夫だいじょうぶだよ!

プログラミングの修行 その4

修行内容:LEDを一周させよう!
ナナ

修行内容をさらにむずかしくしていくよ。みんな、あたま体操たいそうだと思っていてみてね! でも、簡単かんたんにはけないからね。

修行内容:左上から右回りで順にLEDを点灯するプログラム
  • プログラム開始かいし同時どうじに左上のLEDを点灯すること
  • LEDを1秒毎びょうごとに右回りで、じゅん点灯位置てんとういちをずらしていくこと
  • 一周いっしゅうしたら再度さいど、右回りで回り続けること

LEDの点灯を一周いっしゅうだと…。きゅうむずかしさが上がったような気がするぞ。「くりかえし」ブロックと「もし」ブロックを組み合わせればできそうだが。

くっ…、なんてむずかしさだ。できるのか本当に…、考えろ、最後さいごまであきらめるな。みんなも一緒いっしょたたかうぞ!

ナナ

この問題はちょっとむずかしかったけど、みんなけましたか?プログラムは工夫次第くふうしだい様々さまざまなことができますよ。

ブロックをどんな風に組み合わせればよいのかを、パズルのように解いていくんです。

プログラム内容

プログラム解説

「モード」変数は、LEDが点灯てんとうしているへんを表しています。0~3が各辺をしめすようにしています。この「モード」を管理かんりすることで「X」と「Y」をどのように増減ぞうげんするかを決定けっていします。

「モード」変数が0のとき、上辺を意味する。Xの位置をにずらす目的を持つ。
「モード」変数が1のとき、右辺を意味する。Yの位置をにずらす目的を持つ。
「モード」変数が2のとき、下辺を意味する。Xの位置をにずらす目的を持つ。
「モード」変数が3のとき、左辺を意味する。Yの位置をにずらす目的を持つ。

「カウンター」変数は、各辺かくへんの中でLEDをずらす回数を管理しています。0~3で合計ごうけい4回動いたら、次のモードに移行いこうします。

この「モード」と「カウンター」の2つの変数を使うことで、LEDの「X」「Y」の位置いちをずらしながら点灯てんとうしているのです。

「変数」をしっかりと使いこなすことが、プログラムにおいては大事だいじなんだな。変数の数をどんな風に変化へんかさせていくかによって、目的もくてきのプログラムを作り出すんだ!