Armadilloフォーラム

A6E ユーザスイッチ長押し時のフィードバック(LED制御)について

k-nishiki

2023年7月19日 16時42分

ユーザスイッチを用いて、2種類の動作を行うことを検討しています。
 ①長押しT1秒からT2秒未満 動作1を実行する。
 ➁長押しT2秒以上     動作2を実行する。
この時に、スイッチの押下状態をフィードバックするため、例えば、
 長押しT1秒からT2秒未満  LED1を点滅する。
 長押しT2秒以上      LED1を点灯する。
というような処理を追加したいです。
スイッチを押下してからの経過時間を取得したり、2つの設定の1つ目の開始を取得する方法があれば教えて下さい。

よろしくお願いいたします。

コメント

アットマークテクノの古賀です。

k-nishikiさん:
>ユーザスイッチを用いて、2種類の動作を行うことを検討しています。
> ①長押しT1秒からT2秒未満 動作1を実行する。
> ➁長押しT2秒以上     動作2を実行する。
>この時に、スイッチの押下状態をフィードバックするため、例えば、
> 長押しT1秒からT2秒未満  LED1を点滅する。
> 長押しT2秒以上      LED1を点灯する。
>というような処理を追加したいです。

Base OS の buttond サービスを利用するのがよいでしょう。
buttond については、製品マニュアルの「ボタンやキーを使う」で説明しており、SW1 の押下時間による応答動作の設定については、「SW1 の短押しと長押しの対応」に設定例を示しています:
 https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…
マニュアルに記載しているように、/etc/atmark/buttond.conf ファイルに BUTTOND_ARGS の設定行を書くことで、SW1 の押下時間に応じて実行するアクションを設定できます。
上記、(1) と (2) のような場合ですと、弊社ブログの以下のエントリも参考になるでしょう:

 Armadillo-IoT(G4):スイッチ長押しで起動するコンテナを選択する
 https://armadillo.atmark-techno.com/blog/615/15336

このブログでは、「SW1 を5秒以上(10秒未満)長押しで reboot、10秒長押しで poweroff を実行する」場合の設定例を示しています。

>スイッチを押下してからの経過時間を取得したり、2つの設定の1つ目の開始を取得する方法があれば教えて下さい。

スイッチを押下してからの経過時間を buttond サービスが計測して、buttond.conf ファイルで設定された時間に応じて、指定されたアクションを実行します。従って、buttond を利用すれば、経過時間を取得する処理を新たに実装する必要は、ありません。

LED の点滅と点灯制御については、製品マニュアルの「LEDを点灯/消灯する」をご覧ください:
 https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

以上、ひとまずの回答です。ご不明な点などありましたら、お知らせください。

アットマークテクノ 古賀様、

Base OS の buttond サービスについて、ご説明いただきありがとうございます。
ユーザスイッチの基本的な動作については、確認できています。
質問が回りくどくなってしまいましたが、「スイッチが押されたままの状態で、LEDを制御することが可能か」ということになります。
1.スイッチが押される
2.T1時間経過したら、LEDを点滅開始(ここではまだ押下状態)
3.T2時間未満で、スイッチがリリースされたら動作1を実行。LEDを消灯。
4。T2時間経過したら、動作2を実行。LEDを点灯。
上記の3,4については問題ないと考えています。2について、可能な方法があれば教えて下さい。
よろしくお願いいたします。

アットマークテクノの古賀です。

k-nishikiさん:
>質問が回りくどくなってしまいましたが、「スイッチが押されたままの状態で、LEDを制御することが可能か」ということになります。
>1.スイッチが押される
>2.T1時間経過したら、LEDを点滅開始(ここではまだ押下状態)
>3.T2時間未満で、スイッチがリリースされたら動作1を実行。LEDを消灯。
>4。T2時間経過したら、動作2を実行。LEDを点灯。
>上記の3,4については問題ないと考えています。2について、可能な方法があれば教えて下さい。

2 の動作用と、3, 4 の動作用に buttond を複数動作させることで、対応は可能です。
以下に、T1 を1秒、T2 を5秒とした場合の例を示します。

・2 の動作用の /etc/atmark/buttond.conf の設定例

BUTTOND_ARGS="$BUTTOND_ARGS --long PROG1 --time 1000 --action 'echo heartbeat > /sys/class/leds/app/trigger'"

・3, 4 の動作用の buttond の実行例

# buttond /dev/input/by-path/platform-gpio-keys-event \
-l PROG1 -t 4000 -a 'echo "OFF" && echo 0 > /sys/class/leds/app/brightness' \
-l PROG1 -t 5000 -a 'echo "ON" && echo none > /sys/class/leds/app/trigger && echo 1 > /sys/class/leds/app/brightness' &

いかがでしょうか?

アットマークテクノ 古賀様、

buttond を複数動作させることで対応可能とのアドバイスをありがとうございます。
いただいた実行例を参考に、検討したいと思います。