はじめに
以前取り上げた
Pepperのセンサーを長押ししてイベント発火させるボックスを作成してみた
でさいごに書いた指摘について対応してみた。
最初は、ソースを直す方向で「指定のセンサーが押されている状態かマルチスレッド回して監視して、経過時間すぎたらイベント発火で~」と構想(妄想)していたけど、
・イベント目前だし
・マルチスレッドの方法(できる、できない含め)の調査する時間ないし
・動作テスト(CPUぶん回し、メモリオーバーしないよね)の時間ないし
の状態で、「時間との戦いだ」モードに突入していたので、作成したボックスを改変せずに、「今あるもの」で知恵を絞ることにした。
フロー
「長押ししてイベント発火させるボックス」のアウトプットは、前回の記事を参照してください。
- アウトプットの状態ごとに「Switch Case」ボックスで分岐
- アウトプット(0)の場合、
2.1. 「Eye LEDs YELLO」ボックスで「左目を黄色に光らせる」
2.2.「Delay」ボックスで指定の長押し時間まで待機
2.3. 「Delay」がアウトプットしたら(長押し時間が経過したら)「左目を青色に光らせる」 - アウトプット(1,2)の場合
3.1 「Clear」ボックスで目の色をクリアにする
3.2 「Delay」を停止
ようするに、
指定時間以上長押ししたら、目が青色に光るので、そのタイミングで押されている状態を解除すれば、イベント発火が必ず起りますよ!
というボックス配置にすることで、問題を解決しました!
ちなみに、「Clear」ボックスは既存ボックスには含まれていないので、自作です。
さいごに
このフローをダイアグラムボックスにして、各ボックスの設定を親からの継承にしておくと、色々と使い回しできると思います。