『謎解きはディナーのあとで』みたいなタイトルですが・・・
今までGPIOにセンサやスイッチを入力した場合、デバウンス処理が必要になって自作したり過去のプロジェクトからコピーして使ったりしていました。
M5UnifiedやM5Stackのライブラリではボタン用のクラスが用意されており、当然でバウンス処理も実装されています。わざわざ自作しなくてもそれを使えば良いことに気づいて愕然としました。
最近はM5Unifiedを利用することが多いのでこんな感じのクラスで実現できそうです。
極性やプルアッププルダウンをコンストラクタで指定できるとより良いかもです。
class Debouncer : public m5::Button_Class { const int _pin; public: Debouncer(int pin) : _pin(pin) {} void begin() { ::pinMode(_pin, INPUT_PULLUP); } void update() { setRawState(m5gfx::millis(), ::digitalRead(_pin) == LOW); } };
入力する信号によってはButton_Classのメソッド名がピンとこないかもしれないですけどね。
それがどうしても問題だという場合は適切なクラスを作るべきなんでしょう。
その辺は好みもある気がします・・。
ポート読む時自作のデバウンス処理をコピペして使ってたけど、M5UnifiedとかのButton_Class使えば手っ取り早いことに今更気づいたよ
— イナバ (@hollyhockberry) 2022年12月29日
動画では無理やりチャタらせてて半ばヤラセ気味になってますが pic.twitter.com/G3DLVCS3rQ