ロボホンともだち広場

ロブリック

カイくん
2023/12/29 01:54

出席とるよ

ロブリックを使って、オフ会の参加者40人の出席確認をしました!
そのとき作ったロブリックを公開します。(参加者の名前は変えています)
ロブリックのXMLファイルはコメント欄に添付します。

参加者がキーボードで番号(当日配布した名札に記載)を入力すると、ロボホンが名前を呼んで挨拶してくれます。
そして今何人来ているか、誰が来ているかなども把握してくれます。

実際どんな感じで出席確認とるのかは、
https://youtu.be/xH_9CrocQ8Y?si=nMqOdnn6Q505vOAt&t=307
↑シャープさんのブログで取材していただいた動画や

https://x.com/robohonx/status/1709047178608755103?s=20
↑こちら(タワマンオフ会の前日におこなったロブリックオフ会vol.2)の動画をご覧ください。


実際に使う際は、あらかじめロボホン本体とBluetoothキーボードをBluetooth接続しておきます。
ロブリックのファイルをロボホン本体に保存して、ロブリック実行で起動します。

パソコンからロブリックを動かすよりも、ロボホン本体に保存してロブリック実行でやったほうがキー入力などの認識や動作が速いです。一般的な速度で素早く2ケタのキーを打っても大丈夫でした。
(↑ブログの動画でインタビューしていただいた際にはPC画面での動作もお見せしていますが、実際の出席確認はロボホン本体のみで行いました)


最初、ロブリックで出席確認をしようと考えた際、
数名程度なら「キー入力で1が押されたら→佐藤さん」「2だったら→鈴木さん」のように、条件ブロックで分岐するだけでも作れますが、さすがに40名となると大変なので、
今回は連想配列のブロックを使いました。

あらかじめ参加者と2ケタのIDの組み合わせを決めておき、メモ帳などでJSON文字列の形式で{"01":"佐藤さん","02":"鈴木さん"}といった感じで名簿を用意。
また、「まだ来てない人」を読み上げる際の確認用に、IDと名前が逆パターンの連想配列も用意しました。

※ここはややこしいので今後改善しようと思います。

キー入力は、a~z,0~9,←↑→↓が使えますが、
今回の参加者の40名だと全て使っても足りなくて悩んでいたところ、
さいとさんにTwitterで教えていただいたヒントを参考に、2ケタの数字を入力出来るようにしました。
最後に押されたキーをリストに追加するのを2回繰り返し、そのあとリストからテキストに変換して戻して、2ケタの文字として扱っています。

IDの入力を間違えたときのために、すぐに次に進まないように(違う人の名前を呼んでしまわないように)、2ケタの数字を入力後に、もう一度なにかのキーを押すと進むようにしています。
当日はID2ケタの数字のあとにテンキーの+プラスキーを押してもらって、次に進むようにしました。
Enterキーだとロブリック実行が停止してしまうようなので。
IDの入力を間違った際は数字の0ゼロを押すと再度入力が出来ます。

また、管理コマンドとして「IDを入力してね」のときに
↑上矢印を押すと、確認用の関数に飛びます。
↓下矢印を押すと、出席確認を中断して終了します(2重に確認あり)。
先に進んでから途中で戻りたいときは←左矢印を押すと戻ります。
矢印キーはロボホン本体の背中の画面でも操作できるので、基本操作は矢印キーに割り当てました。

上矢印を押した際の確認用の関数では、
「いま何人来ていて、誰が来ているか」、また「まだ何人来ていなくて、誰が来ていないか」をそれぞれ確認できます。

本当は一人ずつ挨拶の内容も変えたらもっと楽しくなったと思いますが、このときは時間がなくて断念しました。。笑
とりあえず今回はオフ会で皆さんに喜んでいただけたので良かったです☆

ロブリックの内容に関しても、まだまだ僕も勉強中なので、、もっと綺麗に簡潔にできそうな気もしますが、、詳しい方いましたらどんどん教えていただけたら幸いです!
 

コメントする
3 件の返信 (新着順)
さいとてつや バッジ画像
2023/12/29 15:52

プログラムの流れはそのままでデータ構造を変えるとしたらこんな感じかな,ということで書いてみました。


カイくん
2024/01/01 03:55

わぁ〜すごい、、、ありがとうございます!!🙇‍♂️
もう勉強になることが多すぎて超絶大感謝です!!😭

引数や返り値など、そろそろちゃんと勉強しないといけないな〜と思ってたところでした。まだまだこの使い方を自分でイチから思い付くまでには時間がかかりそうですが、今年の目標に頑張ります!

2桁のIDの別の方法まで教えていただけて。。テキストブロックにこんな便利なブロックがあったんですね💡
出席人数も、たしかにわざわざ変数にしてカウントしなくても、リストの長さだけでいけますね。

すみません、1点質問なのですが、
関数の中の、変数の名前の _連想配列 _キー などのアンダーバーは、何か区別するために決まった(定石のような)表記の仕方なのでしょうか?

さいとてつや バッジ画像
2024/01/01 23:43

基本的には私の趣味の問題なので,気にしないでください>アンダーバー。普通にロブリックを使っている限りは問題になることはないと思いますので,マネする必要はありません。



ロブリックでは変数の内容をどこからでも参照・変更できてしまう(変数の有効範囲がグローバルになっていると言います)ので,特に関数を使う場合,関数の中から関数の外側で使っている変数も参照・変更できてしまいます。これは特にプログラミング初心者にとっては直感的でわかりやすい反面,意図しない変更もできてしまうという問題もあります。

そこで,関数の中で使う変数にはアンダーバーで付加して,同じものを表すけど別の名前にしておくことで,あくまで関数の中だけで使っていて,関数を呼び出してもその外側で使っている変数を直接参照・変更するつもりはないというのを明示したい,という意図です。

カイくん
2024/01/05 22:05

なるほど、そういうことなんですね!
納得です。教えていただいてありがとうございます!

さいとてつや バッジ画像
2023/12/29 04:04

ざっと見る限り,内側の無限ループは結局どの実行パスを通ってもループを抜けるブロックが実行されているようなので,いらなさそうですね。

あと,「IDと名前」と「まだ来てない人」ですが,キーと値が逆なだけで同じデータをJSONテキストで別々に管理するのは,一貫性が保てなくなる原因になりがちなので避けた方が良いと思います。

また,今回はたまたま問題になっていませんが,名前が一致した場合に「まだ来てない人」のデータがおかしくなる(連想配列のキーは一意でないとダメなので)のでご注意ください。


カイくん
2023/12/29 04:49

おぉ!さっそく教えていただいてありがとうございます!🙇‍♂️
確かに内側の無限ループは不要でしたね。。何十回もやってるのに自分では気が付いてませんでした😅

JSONの件、やっぱそうですよね。後付けで確認用の「まだ来てない人」を作ったのもあって、このような仕様になりました。
ん〜、、何かもっと確実な方法を考えてみます!!💪

カイくん
2023/12/29 01:55

ロブリックのXMLファイルです。
よかったらご自由にカスタマイズしてくださいね!

(さいとさんに教えていただいたとおり内側の無限ループが不要でしたので取り除いたverに更新しました。「出席とるよ2.xml」が最新版です)

picture_icon-02-02 出席とるよ2.xml