見出し画像

M5StickC Plus とUIFlowでプログラミング(5') - 反復(繰り返し)

元記事「M5StickC Plus とUIFlowでプログラミング(5) - 反復(繰り返し)」をRTCで行ったものです。こちらの方が展開がスムーズだと感じています。

元記事はこちら

現在時刻をラベルに表示してみる

 今度は、現在時刻をM5StickC Plusをラベルに表示してみましょう。中央エリアの「ハードウェア」にM5StickC Plusが備えているセンサなどのハードウェアにアクセスできるブロックがまとまっています。
M5StickC Plusは「RTC」(Real Time Clock)を内蔵しています。これは、物理的な「時計」で、設定すれば、現在時刻をずっとM5StickC Plusの中で刻んでくれます。ただし、バッテリがなくなると、時刻の保持もできなくなるので、気をつけてください。

事前準備

まずは、時刻を設定します。この作業は、(今後、バッテリさえ維持できるのならば)最初の1回だけでOKです。バッテリがなくなって時刻も初期化されてしまったらもう1度行ってください。

日時の設定ブロックを配置し、現在の年月日、時刻を設定し、プログラムを実行します。
「年」の設定は、下二桁で保存するようになっているはずですが、初期設定が「1900」、「24」で再設定するとなぜか「1924」になったので、「2024」で上書きしています。
ブロックそのものは2桁での入力にしか対応していないようなので、「数学」から数字のブロックを持ってきています。
これで、M5StickC Plus内部のRTCに時刻が保存されます。

時刻の表示

「ハードウェア」→「RTC」の中の「日時」 を使用します。

「Hello,World!.m5f」で使用した
「ラベル( label0 )に ("Hello M5") を表示」ブロックの中の「("Hello M5")」の代わりにこのブロックをはめます。
「日時」のブロックの中には、RTCから取得した最新の時刻が入っています。「ラベル」は、決め打ちで文字を表示させるだけでなく、このように、ブロックの中身を表示させることもできます。

できたら転送して確かめて見ましょう。表示されましたか?

現在時刻は表示された……けど……?

あなたが、予想していた動作だったでしょうか。多分違っていると思います。そう、このプログラムには重大な欠陥があるのです。

どこでしょう?

それは、確かに、プログラムを実行したときの日時は表示されるのですが、時刻表示が変化しないということです。いくら待っても実行した時刻のままです。

これは、「Setup」ブロックから始まって、「ラベル( label0 )に (日時) を表示」ブロックを実行してラベルに表示したら、プログラムが終了してしまうことが原因です。

プログラムは1回通りしか走らないので、プログラムを転送したときの時刻を表示して、プログラムの実行は終了してしまい、ずっと実行時の時刻を表示したままになってしまっているのです。

時刻は、刻一刻と変化しているはずですので、「時刻の表示」と言ったら、その時、その時の時刻を表示して欲しい、ですよね。

このように、プログラミングでは、「組んでみたはいいものの、自分の想定と違う動作になった」ということがよく起こります。
これは、確かに「困ったこと」なのですが、これこそがプログラミングの醍醐味であり「楽しいところ」でもあるのです。

その動作になる原因は、どこにあるのか、考えて、解決する。

「もしかしたらこうしたらいいかな?」「こうしたらどうだろう?」「ああでもない」「こうでもない」と色々とプログラムを変更して目的とする動作になるように試行錯誤を重ね、それは、時に、解決するまでに数日、数ヶ月を要するときもあります。
しかし、解決したときの達成感、予想した動作になったときの達成感は、何者にも代えがたいものです。

この辺は、合う、合わないがあるとは思います。これを「楽しい」と思えるかどうかがプログラミングが好きになる、ひいては上達する根本ではないかと思っています。

さて、これを解決するにはどうしたらよいのでしょうか。

常に最新の時刻を表示させたい……!

これをなんとかする(更新させる)には、「イベント」の中にある「ずっと」ブロックを使用します。

「ずっと」ブロックは「ずっと」ブロックの中にある処理を順に実行していって終わりまでくると「ずっと」ブロックの先頭の処理に戻って、文字通り「ずっと」実行してくれます。
 修正後のプログラムはこのようになります。

今度は、ラベルの表示が常に更新されて、「ずっと」最新の時刻が表示されるようになりました。

 これは、プログラムの基本の一つ「反復(繰り返し)」です。
多くのプログラムでは、1回実行したらおしまい、ではなく、終了しないで、実行を続けるようになっています。

次の記事は、M5StickC PlusとM5StickC Plus2で違います。

【M5StickC Plus】

【M5StickC Plus2】(無印M5StickC PlusでもOK)


この記事が気に入ったらサポートをしてみませんか?