millis()でデバウンスする
短い安定時間を設けてノイズを無視します。
「millis()でデバウンスする」はCoddyKit上の無料Arduino & IoT Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはArduino & IoT Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Arduino & IoT Academyコースには全4レッスンが含まれています。
なぜ単にdelay()を使わないのですか?
押した後にdelay()で一時停止することもできますが、ボード全体が停止してしまいます。ボタン入力をきれいに処理するには、より賢いmillis()を使います。
millis()はストップウォッチ
millis()は、ボードが動作を開始してから経過したミリ秒数を返します。2回の読み取り値を比較すれば、停止せずに経過時間を測定できます。
unsigned long now = millis();デバウンスの計画
考え方は簡単です。ピンの状態が変わったらタイマーを開始します。短い時間が経過しても新しい状態が安定していれば、その状態を信頼します。
デバウンス時間を選ぶ
通常は50ミリ秒ほど待つのが定番です。チャタリングが収まるには十分な長さですが、人間には気づけないほど短い時間です。
const unsigned long DEBOUNCE = 50;最後の変化を記録する
ピンの状態が最後に切り替わった時刻を保存する変数が必要です。ループが回るたびに、現在時刻と比較します。
unsigned long lastChange = 0;2つの状態を追跡する
生の読み取り値と、確認済みの安定した状態は別々に保持します。生の値にはノイズが含まれますが、安定した状態はロジックが信頼する値です。
int lastRaw = HIGH;
int stable = HIGH;変化を検出する
ループごとにピンを読み取ります。最後の生の値と異なっていれば、信号が変化したので、タイマーをリセットします。
int raw = digitalRead(BTN);
if (raw != lastRaw)
lastChange = millis();安定するまで待つ
最後に状態が変化してから十分な時間が経過すれば、読み取り値は安定したと判断できます。これで実際の状態として安全に受け入れられます。
if (millis() - lastChange > DEBOUNCE) {
stable = raw;
}エッジで処理する
1回の押下につき1度だけ処理するには、安定した状態がLOWに変化するのを監視します。この1回のエッジが、チャタリングのない確実な押下です。
if (stable == LOW && lastStable == HIGH)
Serial.println("clean press");次回に備えて更新する
ループの最後で、現在の読み取り値を最後の値を保存する変数に代入します。これにより、ループのたびに比較対象が最新になります。
lastRaw = raw;
lastStable = stable;ノンブロッキングが有利
millis()はボードを停止させないため、センサーや出力は動作し続けます。ほかのすべての処理を動かしたままデバウンスできます。🚀
クイックチェック
millis()を使ったデバウンスが、押下を本物だと判断する仕組みを確認しましょう。
まとめ:確実な押下
millis()を使ってボードを停止させずにチャタリングを無視し、状態が安定してから押下を1回だけ受け付ける方法を学びました。堅牢でプロフェッショナルな入力処理です!✅
AI チューターと学ぶ C++ — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 30
- レッスン
- 120
よくある質問
「millis()でデバウンスする」レッスンは無料ですか?
はい。「millis()でデバウンスする」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Arduino & IoT Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Arduino & IoT Academyコースには全4レッスンが含まれています。
「millis()でデバウンスする」で何を学びますか?
短い安定時間を設けてノイズを無視します。 ブラウザで直接実行するハンズオンコードでArduino & IoT Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Arduino & IoT Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのArduino & IoT Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「millis()でデバウンスする」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このArduino & IoT Academyレッスンでコードを書いて実行できますか?
はい。すべてのArduino & IoT Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ボタンが「チャタリング」する理由
- millis()でデバウンスする
- EEPROMに値を保存する
- リセット後もカウンターを保持する