デバウンスはButton_Classで

謎解きはディナーのあとで』みたいなタイトルですが・・・

今まで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のメソッド名がピンとこないかもしれないですけどね。 それがどうしても問題だという場合は適切なクラスを作るべきなんでしょう。
その辺は好みもある気がします・・。