2024.03.22前の記事キッチンタイマーの続きデース。設定した時間が経過したら、ゲンガーの目が光るキッチンタイマーを作りますョ。今回は、実際にプログラムを作ってみたのだ。プログラムの動きをお見せしよう。今回のまとめ動画で動きをお見せします!Aボタン、Bボタンで時間を設定して、追加したボタンを押すと、カウントダウンするのだ。カウントダウンの数字の表示がスクロールするのが、いまいちそれらしくないですね。「display.scroll()」によるスクロール表示では、無理があったのだ。今後の改良が必要ですね!ウム。AボタンとBボタンを同時に押すと、設定した時間を0にクリアすることもできるのだ。使用したマイクロビットのバージョン実は、今回作ったプログラムでは、マイクロビットバージョン2を使用します。詳しくは、下のリンクをクリックしてね。(新しいタブで開きます。)【プログラミング】マイクロビット・バージョン2を買ってみた。え、バージョン2って、入手困難になってるやつじゃないですか!(2022年1月現在)申し訳ない。最初のバージョンのマイクロビットで動くプログラムも、近いうちに作るので、ユルシテ~どんなプログラムを作ったのか?実際にプログラムの説明を行う前に、以前考えたキッチンタイマーの動きをおさらいしておこう。(先ほどのリンクをご参照ください。)「分」ボタンで分を設定する。「秒」ボタンで秒を設定する。「スタート/ストップ」ボタンでカウントダウンを開始、中止する。設定した時間(分:秒)が「00:00」になったら音が鳴る。「分」ボタンと「秒」ボタンを同時に押すと、時間(分:秒)が「00:00」にクリアされる。売られているキッチンタイマーを参考にしたのでしたね。これを実現するために、次のような状態の動きを考えた。飛行機のプロペラの時も同じような図が出てきましたね。ボタンの操作で状態が変化するのは飛行機のプロペラと同じ原理なのだ。今回新しいのは、カウントダウンの状態がある、ということなのだ。して、「カウントダウンの状態」でマイクロビットの「utime」を使うのですか?その通り!よく分かったね!そりゃぁ、今回のお題が「utimeを使ってキッチンタイマーを作る」ということですからね(エッヘン)追加した回路について上の説明で、「分」ボタン、「秒」ボタンおよび「スタート/ストップ」ボタンの三つのボタンが出てきた。マイクロビットにはAボタンとBボタンの二つしかついていないですね?そこで、マイクロビットにボタンを一つ追加したのだ。アラームの時に光らせるため、LEDを二つ追加したのだ。0ピンに押しボタンスイッチ、1ピンと2ピンにLEDが追加されていましたね。追加した押しボタンスイッチを「Cボタン」として、マイクロビットのAボタン、BボタンおよびCボタンに、以下のように役割を割り当ててプログラムを作成したのだ。スタート/ストップボタン今回のプログラムは、この回路を前提としています。詳しくは前回の内容をご覧ください。(新しいタブで開きます。先ほどの図に出てきた三つの状態がボタン操作などで切り替わるのは、以前作成したプロペラのプログラムと同じだ。マイクロビットのボタン操作でプロペラの回り方が変わったり止まったりするやつでしたね。(以下をご覧ください。新しいタブで開きます。プラモの飛行機のプロペラ(1)プログラムの全文は以下に掲載しておいたのだ。(新しいタブで開きます。)【マイクロビット応用】[9.1]キッチンタイマーのプログラム:最初のバージョンのプログラムいよいよプログラムの説明ですね!ウム!ちょっと長いけど、頑張ってついてきてくれたまえ!どのボタンが操作されたかを調べるための関数についてマイクロビット本体のAボタン、Bボタンと、追加したCボタンのうち、どれが押されたかを調べるため、「UserInput()」という関数を作成したのだ。どのボタンが押されたか調べる。飛行機のプロペラのプログラムの時にも同じような関数を作りましたね。・・・あれ、Aボタン、Bボタンがされたときに、「UserInput_CheckA()」、「UserInput_CheckB()」などの関数が呼び出されますね?(28行目、30行目)キッチンタイマーのプログラムでは、設定時間を0秒にクリアするため、AボタンとBボタンが同時に押されたかどうかを判定しないといけない。いえば、そういう機能もありましたね。関数「UserInput_CheckA()」および「UserInput_CheckB()」でこの判定を行っているのだ。Aボタンが押されたとき、Bボタンが押されているかどうかを調べる。Bボタンが押されたとき、Aボタンが押されているかどうかを調べる。‘b’Aボタンが押されたときは「UserInput_CheckB()」が呼び出される。15行目でBボタンが押されているかどうかを調べる。押されている場合は「’w’」が、押されていない場合は「’a’」が返される。Bボタンが押されたときは「UserInput_CheckA()」で、同時にAボタンが押されたかどうかを調べるのですね。その通り!そして、AボタンとBボタンが同時に押されていれば「’w’」、押されていなければ「’b’」が返されるのだ。いうことは、AボタンとBボタンが同時に押されている場合には「’w’」が返される、というとなのですね。ちなみに、Cボタンの場合は「’c’」が返される。(Cボタンについては、以下をご覧ください。新しいタブで開きます。)【マイクロビット応用】[8.1]キッチンタイマーのプログラム:追加した回路の確認用プログラムと、いうことは、関数「UserInput()」は、押されているボタンに応じて次のような値を返すように作られているのですね。分ボタンと秒ボタンが同時に押されている。設定の状態の動きをする関数について設定の状態では、上で説明したボタンの操作に従って、カウントダウンする秒数を設定する。何秒後にアラームが鳴るのかを設定するのですね。その「何秒後」というのをマイクロビットに覚えていてもらうため、「s」というグローバル変数を用意した。0「s」は「sec(秒)」の「s」ですか?イエ~ス。この「s」はグローバル変数なので、プログラム全体で有効、すなわち、プログラムのどこからでも値を見たり、変えたりすることができるのだ。グローバル変数については、以下を見ればよいですね。(新しいタブで開きます。)【マイクロビット入門】(11)グローバル変数とローカル変数そして、グローバル変数「s」は、プログラムの動作が「設定の状態」の時に、Aボタン、Bボタンの操作によって設定される。STATE_COUNT_DOWN45行目で現在の設定値を表示した後、46行目でどのボタンが押されたかを調べる。押されたボタンに応じて、以下のようにグローバル変数「s」の値を設定するのだ。