M5StickCでUIFlow入門 その3 LED制御とブロックの種類

現時点の情報です。最新情報はM5StickC非公式日本語リファレンスを確認してみてください。

概要

前回はCloud版とDesktop版でわけましたが、今回からは共通です。画面キャプチャがやりやすいDesktop版を利用していますが、利用しているバージョンは同じなので機能に差はありません。

ボタンを押したらLEDをつける

今回からすこし実践的なプログラムをしてみたいと思います。M5StickCにはボタンとLEDが内蔵されているので、使ってみたいと思います。

上記がイベントを選択した画面です。前回ずっとのループ処理を使ったと思います。その下にはボタン系のイベントと、タイマー系のイベントがあります。

今回はボタン系のイベントを使って、ボタンを押したときにLEDをつける処理を作ってみたいと思います。

ボタンを押したときの処理は、上記のブロックを使います。ボタンは真ん中のAボタンと右側にあるBボタンが選択できます。

条件メモ
wasPressedボタンを押したとき
wasReleasedボタンを離したとき
longPress長押ししたとき
wasDoublePressすばやく2度押ししたとき

通常は押したときのwasPressedと、離したときのwasReleasedを使います。それ以外の操作をしたい場合に長押しと2度押しを使いますが操作が難しいので、なるべく使わない方がいいと思います。

今回はAボタンを押したときにLEDをつけて、離したときにLEDを消したいと思います。

ハードウエアのLEDの中にLEDのONとOFFがあるので使ってみます。wasPressedで押したときにLED ON、wasReleasedで離したときにLED OFFにします。

今回はSetupのブロックには何もつけません。ボタンのブロックもどこにおいても大丈夫です。

この状態で再生ボタンを押して実行してみてください。Aボタンを押している時だけLEDがつきましたでしょうか?

ブロックの種類

細かいブロックの説明は今後していきますが、ブロックの形によって種類がわかれているので、見分けることができるようになってください。

上下にくっつくブロック

上記のような形のブロックが上下にくっついてつながるブロックになります。一番したの「画面をクリア」ブロックのように、上がへこんでいて、下がでっぱっています。どこにもくっついていないブロックは色が灰色になって、無効であることがわかるようになっています。

独立して動くブロック

ボタンのように独立して動くブロックは、外側にでっぱりもへこみもありません。

上のようなブロックが、独立して動くブロックになります。

値のブロック

左側がでっぱっているブロックは値のブロックになります。他のブロックに、その形のへこみがありますので、くっつけることで数値や文字を指定することができます。

内部処理があるブロック

複数のブロックの種類が複合しているものがあります。もしというブロックは、右側に条件の値のブロックがあり、その下には上下につながるブロックもくっつけることができます。

上記のプログラムでも、ボタンを押したらLEDがつき、ボタンを離したらLEDがきえる処理にもなります。

ずっとでループを作る組み方は古典的なプログラム方法ですが、UIFlowの場合にはイベントの独立したブロックを使うほうがスッキリした画面になると思います。

プログラムには唯一の正解はありませんので、最終的に動いていればどんな形になっても構わないと思います。

ただし、みやすさなどの差はでてくるので、なるべくシンプルな処理の方が好ましいとされています。

LEDチカチカ(Lチカ)

電子工作では、最初にLEDをチカチカ点灯させるプログラムを作ることが多いので、作ってみたいと思います。

今回は0.5秒間LEDをつけてから、0.5秒間LEDを消すを繰り返すLチカにしたいと思います。1秒は1000ミリ秒なので、プログラムでは少数点がある0.5秒ではなく、500ミリ秒として処理する場合が多いです。

上記が一例です。ずっとブロックでループさせて、LEDつけてから0.5秒停止して、その後LEDを消してから0.5秒停止しています。

最後の0.5秒停止を忘れると、LEDがほぼ消えていない状態になると思います。

上記がちょっと変わった処理になります。細かい処理は今度説明しますが、1秒間隔で呼び出すタイマーをつかっています。タイマーが呼び出されたときブロックの中で、LEDをつけてから0.5秒間停止してLEDを消しています。

こちらの処理ではLEDを消してからの停止していません。しかしこの処理でも0.5秒間LEDがついて、0.5秒間LEDが消えているLチカが正しく動きます。

わかりやすさのために、LED OFFブロックの下に500ミリ秒停止を追加してもかまいません。

なくても良いブロックは削除するのでも、わかりやすさのために追加するのもどちらも正しい考え方です。プログラムは自由に組めるので、好きなように組んでいってください。

とはいえ、考え方はプログラムの中では統一したほうが好ましいです。同じような処理でこっちは消して、こっちは追加してと混在しているのは好ましくありませんので、どちらかに統一してください。

まとめ

今回も概要的な説明になってしまいましたが、プログラムに正解はないので自由に試してみてください。

次回からはもう少しブロックの動きについて説明をしていければと思います。

続編

コメント