2020年3月号では、探検ウォッチに時計機能を追加したね。でも、時刻を確認するだけじゃなくて、いろいろな機能を切り替えて使ってみたい。そこで、モード機能をつくろう。モードは、micro:bitのボタンの押し方によって機能を切り替えていくものだ。今回はモード0から3までの4つのモードをつくる。
それぞれのモードの設定と、モードの切り替え方は以下のようになるよ。
モード名 | 時刻設定 | 時計機能 | タイマー | 今は機能なし |
---|---|---|---|---|
モード変数 | モード=0 | モード=1 | モード=2 | モード=3 |
動作説明 | 時刻を設定できる。 Aボタンで時が増える Bボタンで分が増える A+Bボタンで時計機能に戻る |
傾けて画面を見ると時刻が表示される ボタンAでタイマーになる ボタンBでモード3 ボタンA+Bで時刻設定 |
3分を計測できる。Aボタンを押すとスタート A+Bで時計機能に戻る |
機能はない 「Make your own function(独自の機能をつくろう)」の表示のみ |
コード:条件 | <モード=0>のとき | <モード=1>のとき | <モード=2>のとき | <モード=3>のとき |
ボタンAが押されたとき | 時間の数値が増える | タイマー機能に切り替える | タイマースタート | 特になし |
ボタンBが押されたとき | 分の数値が増える | モード3に切り替える | 特になし | 特になし |
ボタンA+Bが押されたとき | 時計の機能に戻る | 時刻設定に切り替える | 時計機能に戻る | 時計機能に戻る |
ロゴが上を向いたとき | 特になし | 時刻を表示 | 特になし | 特になし |
①micro:bitを傾ける(“ロゴが上になったとき”)に時刻を表示(モード=1)
②モード=1の時にボタンAとBを一緒に押すと時刻を設定できる(モード=0)
③モード=0の時にボタンAとBを一緒に押すとモード=1に戻る(時刻を設定したらモード=1に戻ろう)
④モード=1の時にボタンAを押すと3分間測れるタイマーになる(モード=2)
⑤モード=2の時にボタンAとBを一緒に押すと、モード=1に戻る
⑥モード=1の時にボタンBを押すとモード=3になる
⑦モード=3の時にボタンAとBを一緒に押すとモード=1に戻る
「モード=3」はなにも機能を入れていないので、ボタンを押すと「Make your own function」と表示されるだけだ。ここにはキミのオリジナルの機能をつくってみてほしい。
モードをプログラムで扱うために「変数」カテゴリーで新しく変数「モード」をつくる。モードを変えるときには、「変数“モード”を“0”にする」ブロックで、“0”をそれぞれの番号にするといい。
モード切替機能のプログラムは以下で公開している。下の画面を右クリックして表示される「新しいウィンドウ」を選択すると、新しいウィンドウでMakeCodeの画面が開くよ。
モードを切り替えるプログラムをつくるときは、”ボタンAが押されたときモードはいくつか確認する”のように考えるといいだろう。上で説明したモードの切り替え方を参考にして、ボタンAが押されたときのモードにより、どのモードに切り替わるかをプログラミングしたのが下のプログラムだ。モード=3のときのプログラムは何もないので、ここではとりあえずボタンAが押されたらモード=1に戻るようにした。モード=3のプログラムをつくったときに、内容に応じて変更してね。
モード=0のときにボタンAを押せば「時」が設定できる。「時」の設定は関数「(時)を増やす」ブロックを新しくつくって、関数にしているよ。「ボタン“A”が押されたとき」ブロックで呼び出している。
探検ウォッチの機能を増やしていくと、プログラムはどんどん複雑になっていく。関数にしてプログラム内で参照することで、できるだけ短くて、わかりやすいプログラムしている(関数については2020年2月号を参考にしてね)。
このプログラムはモード=3に機能は何もないのは上で説明した通りだ。キミのオリジナル機能をつくってみよう!