Arduino & IoT Academy · レッスン

millis()でデバウンスする

短い安定時間を設けてノイズを無視します。

レッスン 2/413 ステップ

「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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ボタンが「チャタリング」する理由
  2. millis()でデバウンスする
  3. EEPROMに値を保存する
  4. リセット後もカウンターを保持する
← Arduino & IoT Academyに戻る