見出し画像

ボードゲームタイマーをM5Stack Fireで作る(5)

これまで4回にわたってM5Stackを使ったボードゲームタイマーの作成方法を紹介してきました。

先日のボードゲーム定例会で持参して実際に使ってみましたが、機能は概ね好評でした。しかし使ってみたときの課題が出てきましたので、その改善点と対応を考えることにしました。

1.改善点

1-1. バッテリー残量

実際に使ってみたところ、合計4時間強使用してM5Stack Fireの500mAhのバッテリーが切れることはありませんでした。恐らく、平均すると100mAくらいで動作していると思います。
しかし、いつバッテリーが切れるのか分からずに使うのはストレスでしたので、タイマーが動いているときにバッテリー残量を画面に表示したいと思います。

1-2. 誰のタイマーか分かりにくい

M5Stackの向きを変えると個別のタイマーがカウントダウンしますが、ボードゲームを遊びながらですと、どれが自分のタイマーか分からなくなることがありました。
そこで、本体側面にダイソーの色分けラベルを貼って識別したいと思います。当初は向きを変えたときに画面の背景色を変えようと思いました。しかし、それはM5Stackの向きを変えた後に正しい方向にしたか確認する手段で、今回欲しいのは向きを変える前にどれが自分のタイマーか確認する手段のため、無理にシステムで対応しないことにしました。

1-3. 持ち時間がなくなったときの画面表示

ボードゲームタイマーを導入しているのは、帰宅時間が決まっているメンバーが帰る前に1ゲーム終わるようにするための目安として使っています。しかしいざ使い始めると、どれくらいの時間を使ったかをゲーム終了後に話すことが分かりました。
そこで現在は時間を使い切ったときは00:00を表示するだけですが、余計に使用した時間を赤文字でカウントアップするように改造したいと思います。

1-4. リセットボタンを押したときの画面表示

操作していて気になった非機能的な部分です。リセットボタンを押したときの動きが数字が点滅してから時間がリセットされるように見え、動きに違和感があるので原因を調べたいと思います。

2. 対応方法

2-1. バッテリー残量を追加表示する

UIFlowの中にバッテリー残量を表示するブロックがハードウェア->バッテリーにあります。このバッテリー残量[%]を液晶画面に表示すれば良さそうです。

バッテリー関連のブロック

バッテリー残量の表示位置はタイマー設定時に設定箇所を変更する">>"の表示位置と共有します。それはタイマー開始後はここに何も表示しないからです。(黄色枠内)

黄色枠内にタイマー動作時にバッテリー残量を表示する

タイマー表示を更新するshow_timer関数にバッテリー残量を表示する処理を追加しました。タイマーを一度止めて再設定するときにはバッテリー残量の表示を">>"に戻さないといけないところに注意します。

バッテリー残量をタイマー動作中だけ表示する

2-2. 本体側面にポイントシールを貼る

購入したポイントシールを本体側面に貼ります。各プレイヤーは自分の色を覚えていれば、シールの貼られた面を上にすれば自分のタイマーに切り替わります。

ポイントシールで識別する

2-3. 持ち時間がなくなったときの画面表示

あるプレイヤーの残時間か0秒になったとき、新たに定義したプレイヤー毎の時間切れフラグスイッチをOnにして、このフラグスイッチがOnになっているプレイヤーは、時間を減算するのではなく加算するように変えます。また、このフラグスイッチがOnになっているプレイヤーの時間は赤文字で表示します。

残り時間0秒になったことを示すフラグスイッチ
残り時間が0秒になったプレイヤーは時間が赤文字になる

2-4.リセットボタンを押したときの挙動

リセットボタンを押すと最初に設定したタイマー時間に戻して、タイマーを再設定できるようにしています。その動きを考えると、まず時間を最初の時間に戻してから数字を点滅するのが自然です。しかし現在は数字を点滅してからタイマーがリセットされているように見え、違和感を感じたので原因を調べました。
UIFlowで1ブロックずつ処理を止めて確認する方法(ラインデバッグ)が分かっていないので、当てはまる処理を頭の中で想像しながら処理を追うことにしました。
するとタイマーの変数を初期値に戻した後にディスプレイ表示を更新せずに数字を点滅する処理になっていることに気がつきました。つまり違和感を感じたとおりに処理していたことになります。そこでリセット直後にも関数show_displayを呼んで表示を更新しました。

リセットした時間で画面表示を更新する

更新したUIFlowのファイルをダウンロードできるようにしますので是非お試しください。ブロックはまとめる余地が大いにありますが、まずは動くものを作っていきます。

今後は少し間隔が空きますが、見本となっているDGT cubeに少しずつ近づけていきたいと思います。


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