タクトスイッチで押した瞬間だけモード切替を実現する方法

C言語関連

タクトスイッチを押している間、モードが自動で連続切り替えされてしまう問題は、多くの電子工作初心者が直面する課題です。この記事では、押した瞬間だけモードを切り替える方法について解説します。

チャタリングと連続切替の原因

タクトスイッチを押すと、接点が短時間でオン・オフを繰り返す「チャタリング」が発生することがあります。これにより、押している間にモードが何度も切り替わってしまいます。

さらに、コード上で押下状態を連続的に読み取っている場合も、押している間にmodeやselectが増減し続ける原因となります。

フラグを使った押下検知の改善

押した瞬間だけ切り替えたい場合は、スイッチの状態を一度だけ検知するフラグを使用します。例えば、前回の状態を記憶しておき、押下の変化があったときだけmodeを増減させる方法です。

具体的には、prevButtonStateという変数を用意し、現在のPINB状態と比較して押された瞬間のみ処理を行うようにします。

簡単なコード例

以下のように書き換えると、押した瞬間だけモードが切り替わります。

if (!(PINB & (1 << PINB0)) && prevB0State){ _delay_ms(20); mode++; if (mode > 14) mode = 0; } prevB0State = !(PINB & (1 << PINB0));

この処理を各ボタンに適用することで、押している間に連続で切り替わる問題を防げます。

追加のデバウンス対策

チャタリングを完全に防ぐためには、_delay_msでのソフトウェアデバウンスや、RC回路などのハードウェアデバウンスも併用するとより安定します。

特に高速でボタン操作する場合は、フラグとデバウンスを組み合わせることで、誤動作をほぼゼロにできます。

まとめ

タクトスイッチのモード切替を押した瞬間だけにするには、前回状態を保持するフラグを使った押下検知が効果的です。チャタリング対策として_delay_msやハードウェアデバウンスを併用することで、安定したスイッチ操作が可能になります。

この方法を導入すれば、押しっぱなしによる意図しない連続切替を防ぎ、操作性の高いモード切替を実現できます。

コメント

タイトルとURLをコピーしました