2022年8月12日金曜日

エレガントなdebounce(チャタリング防止)のためのArduinoコード

先日Arduinoのソースコードを書いてふと思ったのですが、 何かを作るたびに毎回同じようなコードを書いていることに気づいたため、エレガントに実装できないか考えてみました。

回路図

ESP32を使用していますが、ArduinoUNOやRaspberryPiPicoでも同じです。ただしピンを変更してください。

ソースコードと実装

SwitchInterface classの部分をコピーするなり、適当にSW_IF.hなどの名前で外部記述してincludeすれば、あとはグローバルでインスタンスするだけで使えます。(ここではBUTTONという名前)
あまりincludeするファイルを増やしたくないという方は、数十行のコードなので、inoファイルに直接コピーすると良いでしょう。

1 SwitchInterfaceクラスをコピー
2 SwitchInteface インスタンス名(ピン番号)をグローバルで記述
3 インスタンス名.onSWdown()でスイッチが押されたことを検出するので、そのあとの動作を記述


debounceについて

サンプリング周期(最後のほうに記述しているdelay)は3ms~20msで良いと思います。debounceの起こる時間はおよそ3msくらいらしいので、最低でも3msec以上は必要です。
上限は20msecでも100msecでも良いのですが、あまり大きくしすぎるとスイッチの反応が遅くなります。

0 件のコメント:

コメントを投稿