この記事では、MakeCode for micro:bitのチュートリアル「モールス符号で話そう(Morse Chat)」について紹介します。
「モールス符号で話そう(Morse Chat)」では、ロゴと無線通信機能を使って、他のマイクロビットとモールス符号をやりとりするプログラムを作ります。
モールス符号(ふごう)とは、長い信号と短い信号を組み合わせて文字や数字などを表す電信用の符号です。
ジブリ映画「天空の城ラピュタ」の冒頭でムスカがモールス符号を送っていたり、「崖の上のポニョ」で宗介がお父さんとモールス符号で会話しているシーンがありましたね。
それでは、モールス符号でメッセージを送受信してみましょう!
また、実機で動かす場合マイクロビットは2台以上必要です。
チュートリアルを開始する
MakeCode for micro:bitのホーム画面を開きます。
チュートリアル「Morse Chat」を選択し、ブロックの「チュートリアルを開始」をクリックしましょう。
不要なブロックを消す
「最初だけ」「ずっと」ブロックは今回使わないので消しましょう。
モールス符号「・」を送る
入力カテゴリの「ロゴが短くタップされた」ブロックを出し、中に無線カテゴリの「無線で数値を送信」ブロックを入れます。
送信する値は0のままでOK。
無線通信で、同じグループのマイクロビットに数値を送信します。
モールス符号「-」を送る
もうひとつ「ロゴが短くタップされた」ブロックをプログラミングエリアに出します。
新しく出した「ロゴが短くタップされた」ブロックの「短くタップされた」をクリックして「長くタップされた」に変更しましょう。
「ロゴが長くタップされた」ブロックの中に、無線カテゴリの「無線で数値を送信」ブロックを入れ、送信する値は1に変更します。
ここまでで、2種類の信号を送信するプログラムができました。
- ロゴを短くタップ(短い信号「・」) → 0を送信
- ロゴを長くタップ(長い信号「-」) → 1を送信
数値を受信したとき
メッセージを受信したときの処理を作りましょう。
LED画面と音で受け取った信号を表します。
短い信号の0を受信したときと、長い信号の1を受信したときで処理が分かれますよ。
無線カテゴリから「無線で受信したとき(receivedNumber)」ブロックを出し、中に論理カテゴリの「もし<真>なら/でなければ」ブロックを入れます。
- 「無線で受信したとき(receivedNumber)」ブロック
マイクロビットが無線で数値を受信したとき、中に配置したプログラムを実行します。receivedNumberには、受信した数値が記憶されています。
- 「もし<真>なら/でなければ」ブロック
もし条件が正しい(真)場合、「なら」の下にある命令を実行します。正しくない(偽)場合は、「でなければ」の下にある命令を実行します。
判定条件を設定しましょう。
論理カテゴリの「0 = 0」ブロックを出し、「もし<真>なら/でなければ」ブロックの<真>の部分に配置します。
「無線で受信したとき(receivedNumber)」ブロックにあるreceivedNumberを「0 = 0」ブロックの左側の0の位置へドラッグアンドドロップしましょう。
これで「受信した数値が0なら」という条件になりました。
受信した数値が1だった場合
「受信した数値が0でなければ」の時の処理を作ります。
受信した数値が0でない場合、受信した数値は1なので長い信号「-」を表示します。
基本カテゴリから「LED画面に表示」ブロックを出し、「もし receivedNumber = 0 なら/でなければ」ブロックの「でなければ」の下に配置しましょう。
中央の3つならんだLEDを点灯させて「-」をかきます。
音も追加しましょう。
音楽カテゴリから「音を鳴らす」ブロックを出し、「LED画面に表示」ブロックの下に配置します。
音の高さや長さはそのままでOK。
受信した数値が0だった場合
「受信した数値が0なら」の時の処理を作ります。
受信した数値が0の場合は、短い信号「・」です。
基本カテゴリから「LED画面に表示」ブロックを出し、「もし receivedNumber = 0 なら/でなければ」ブロックの「もし receivedNumber = 0 なら」の下に配置します。
中央のLEDを点灯させて、「・」をかきます。
音も追加しましょう。
音楽カテゴリから「音を鳴らす」ブロックを出し、「LED画面に表示」ブロックの下に配置します。
音の高さはそのまま。長さは-より短くしたいので1/4拍にしましょう。
LED画面の表示を消す
このままだとLED画面に「-」や「・」が表示されっぱなしなので、LED画面の表示を消しましょう。
基本カテゴリから「表示を消す」ブロックを出し、「もし receivedNumber = 0 なら/でなければ」ブロックの下に配置します。
グループ番号を設定
これでチュートリアルのプログラムは完成です。
しかし、チュートリアル「マイクロチャット(Micro Chat)」をやったことのある人は、無線のグループを設定しなくていいの?と思ったのではないでしょうか。
「無線のグループを設定」ブロックを使ってグループ番号を設定しなかった場合、プログラムが勝手にグループ番号を決めてしまいます。
全く同じプログラムを複数のマイクロビットにダウンロードロードした場合、同じグループ番号になり、おたがい通信することができます。
しかし、一部のマイクロビットにだけ変更を加えると、別々のグループになってしまい通信できなくなってしまいます。
無線通信を使うプログラムを作る場合は、グループ番号を設定した方がいいと思います。
「完了」をクリックすると、チュートリアルが完了し、全てのブロックが使えるようになります。
「最初だけ」ブロックの中に「無線のグループを設定」ブロックを配置しましょう。
近くにいる別のグループと番号がカブらない、好きなグループ番号を設定してください。
シミュレーターで確認する
シミュレーターで作ったプログラムを試してみましょう。
シミュレーターのロゴをタッチすると、2つ目のマイクロビットが表示されます。(画面が小さいと表示されないことがあります)
もう一度ロゴをタッチすると、もう一方のマイクロビットにメッセージを送信します。
- ロゴを短くタッチ:短い信号「・」を送信。
- ロゴを長くタッチ(3つ数える):長い信号「-」を送信。
マイクロビットにプログラムを転送する
シミュレーターで正しく動くことを確認できたら、マイクロビットに転送して動かしてみましょう。
実機で動かす場合、マイクロビット(V2.0~)が2台以上必要です。
マイクロビットにプログラムを転送する方法は「【マイクロビット】パソコンとのつなぎ方・外し方、プログラムの転送方法」でくわしく紹介しています。
V1.5のマイクロビットでも、ロゴをタッチのコンテナを消せば、受信だけなら可能になります。
送信したい場合、ロゴのタッチはボタンなどで代用しましょう。
まとめ
「モールス符号で話そう(Morse Chat)」について紹介しました。
今回使用したブロック
- 「無線で数値を送信」ブロック
無線通信で、同じグループのマイクロビットに数値を送信します。
- 「無線で受信したとき(receivedNumber)」ブロック
マイクロビットが無線で数値を受信したとき、中に配置したプログラムを実行します。receivedNumberには、受信した数値が記憶されています。
- 「もし<真>なら/でなければ」ブロック
もし条件が正しい(真)場合、「なら」の下にある命令を実行します。正しくない(偽)場合は、「でなければ」の下にある命令を実行します。
ロゴと無線通信機能の使い方は、下の記事でくわしく解説しています。