クリエイター手抜きプロジェクト[606]IoT HaloCode編 キッチンタイマーを作る(2)/古籏一浩

投稿:  著者:  読了時間:7分(本文:約3,100文字)



今回は、HaloCodeのキッチンタイマーを、さらに改良します。HaloCodeには4つのタッチセンサーがあります。このタッチセンサーを利用して、タッチした個所に応じて動作するタイマーの、時間を変えることにします。





まずは、前回のタイマーを少し修正します。前回はボタンが押されたらタイマーがスタートしましたが、今回はタッチセンサーの0番をタッチしたらタイマーをスタートするようにします。

前回のプログラムの最初のブロック、「ボタンが押されたとき」を削除します。ブロックをクリックしてから、deleteキーを押します。

次にイベントのカテゴリにある「タッチパッド[0]に触れたとき」ブロックを、「ボタンが押されたとき」の代わりに配置します。これで0番のタッチセンサーをタッチすると、タイマーが動くようになります。プログラムをアップロードして、動作を確認してみてください。

動作を確認したら、今度はタッチされた個所に応じてタイマーの時間を変えます。ここでは、以下のようにします。

0番 12秒
1番 1分
2番 3分

もうひとつタッチセンサーがありますが、今回は何も設定しません。タッチされた場所に応じて、タイマーの秒数を変えるには一つ作成して複製する、という方法もあります。ブロックでプログラムする場合は、その方が見やすいこともあります。

このようにブロックを複製して動作させるのは、プログラマにはたぶん好まれないかもしれません。ただ、この方法であればタッチされたセンサーごとに、固有の動作をさせやすいという利点があります。

例えば、1分タイマーであれば5秒間隔で消灯していきますが、いきなり消灯するのではなく、輝度を変えていったり、色をかえて時間を示すといった、細かい処理が簡単にできます。

単純にタイマー時間しか違わないのであれば、まとまった処理を行なう「ブロック定義」を利用する方法があります。これは一般的なプログラムで言う「関数」になります。

それでは、Timerというブロックを定義してみましょう。ブロック定義のカテ
ゴリをクリックします。すると「ブロックを作る」というボタンが表示されま
す。このボタンをクリックします。

ブロックが表示されますので、選択されている「ブロック名」を「Timer」に変えます。次に「引数を追加 数値」のブロックのアイコンをクリックします。

これはブロックにパラメーターを渡す場合に使います。今回は、間隔を示す秒数だけなので、パラメーターは一つだけです。すると(数値1)という文字がハイライトされます。この文字を「秒数」に変えます。変えてからOKボタンを押せば、ブロックが定義されます。

定義されたブロックが、レイアウト画面に配置されます。「タッチパッド[0]に触れたとき」のブロックの代わりに、定義したブロック「定義 Timer(秒数)」ブロックをくっつけます。

次に「(1)秒待つ」ブロックの(1)に「定義 Timer(秒数)」ブロックの(秒数)をドラッグして入れます。これで、定義したブロックを使う準備は完了です。

次に、「タッチパッド[0]に触れたとき」ブロックを配置し、その下に「Timer(1)」ブロックを配置します。「Timer(1)」ブロックは、ブロック定義のカテゴリの中にあります。

あとは、この作成した「タッチパッド[0]に触れたとき」ブロックと、「Timer(1)」ブロックを複製します。複製したらタッチパッドの番号と秒数を変更します。

できたらアップロードして、動作を確認してください。タッチするとタッチした場所に応じて、タイマーの時間が変わります。

これでバッチリです。と書きたいところですが、複数のタッチセンサーにタッチすると、カウントダウンの間隔がずれてしまいます。多分、関数を何度も呼び出してしまっているからなのでしょう。タイマーをリセットするブロックも入れてみましたが、効果ありませんでした。

このような場合、すでにタイマーが動作しているかどうかを調べます。タイマーが動作していない場合のみ、新たにタイマーを動作させます。

これを実現するために、新たに変数を作成します。この変数名はflagにします。この変数が0ならタイマーは動作していない、1ならタイマーが動作中ということにします。

定義ブロックの最初で判断し、0の場合だけタイマーを動作させます。判断は制御カテゴリにある「もし< >なら」ブロックを使います。ブロックは以下のように配置します。

「定義 Timer(秒数)」
「もし<(flag)=(0)>なら
「[flag]を(1)にする」
「すべてのLEDを( )色で点灯する」
「[pos]を(0)にする」
「(12)回繰り返す」
「[pos]を(1)ずつ変える」
「(秒数)秒待つ」
「LED(pos)を消灯する」
「[flag]を(0)にする」

これでキッチンタイマーの完成です。


【古籏一浩】openspc@alpha.ocn.ne.jp
http://www.openspc2.org/

世代にもよるけど、やはりアラン・ケイのダイナブックという名称は、どうにかこうにか使いたいのかもしれません。そのままのネーミングのダイナブック(Dynabook)という名称は、すでに東芝のノートパソコンで長年使われてます。

そして、ダイナブックをもじった子供向けのIchigoJam(Latte)搭載ノートパソコンも出てしまいました。名前は「いちごだいふく」。

・IchigoDyhook
https://pcn.club/sp/dyhook/

もじりすぎて分かる人にしか分からないネーミングかもしれませんが、まあそこはそれ。注文はしたけれど、3月にならないと手元には来ないようです。気長に待つしかなさそうです。

・みんなのobniz入門
https://www.amazon.co.jp/dp/4865942165/

・InDesign自動化サンプルプログラム逆引きリファレンス上/下
https://www.amazon.co.jp/dp/4844396846/
https://www.amazon.co.jp/dp/4844396854/

・創って学ぼうプログラミング
https://news.mynavi.jp/series/makeprogram

・みんなのIchigoLatte入門 JavaScriptで楽しむゲーム作りと電子工作
https://www.amazon.co.jp/dp/4865940936
[正誤表]
http://www.openspc2.org/book/error/ichigoLatte/

・After Effects自動化サンプルプログラム 上巻、下巻
https://www.amazon.co.jp/dp/4844397591
https://www.amazon.co.jp/dp/4844397605

・IchigoLatteでIoT体験
https://www.amazon.co.jp/dp/B06X3X1CHP
http://digiconcart.com/dccartstore/cart/info/2561/218591

・みんなのIchigoJam入門 BASICで楽しむゲーム作りと電子工作
http://www.amazon.co.jp/dp/4865940332/

・Photoshop自動化基本編
http://www.amazon.co.jp/dp/B00W952JQW/

・Illustrator自動化基本編
http://www.amazon.co.jp/dp/B00R5MZ1PA/

・4K/ハイビジョン映像素材集
http://www.openspc2.org/HDTV/

・クリエイター手抜きプロジェクト
http://www.openspc2.org/projectX/