Arduino & IoT Academy · レッスン

millisでdelayなしに点滅させる

経過時間を追跡し、予定どおりにタスクを実行します。

レッスン 3/413 ステップ

「millisでdelayなしに点滅させる」はCoddyKit上の無料Arduino & IoT Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはArduino & IoT Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Arduino & IoT Academyコースには全4レッスンが含まれています。

組み込みのストップウォッチ

millis関数は、ボードの電源が入ってから経過したミリ秒数を返します。無料で、常に時間を数え続けるストップウォッチです。⏱️

unsigned long now = millis();

unsigned longを使う理由

millisの値はunsigned longに保存します。時間とともにカウントが非常に大きくなるため、通常のintでは1分未満でオーバーフローしてしまいます。

基本的な考え方

一時停止する代わりに、最後に処理を行った時刻を記録し、各loopでそこからどれだけ時間が経ったかを確認し続けます。

最後の時刻を記録する

previousMillisのような変数を用意し、最後にLEDを切り替えた時刻を保存します。loopが回るたびに現在時刻と比較します。

unsigned long previousMillis = 0;

間隔を設定する

点滅の間隔として、たとえば1000ミリ秒のintervalを選びます。この時間が経過してから処理を行うことで、安定したリズムになります。

const long interval = 1000;

十分な時間が経ったか

各loopで、現在のmillisからpreviousMillisを引きます。その差がinterval以上なら、処理を実行するタイミングです。

if (millis() - previousMillis >= interval) {

タイマーをリセットする

処理を実行した瞬間に、previousMillisを現在時刻に設定します。これでカウントダウンが再開し、次の点滅まで再びinterval全体を待ちます。

previousMillis = millis();

LEDを切り替える

時間を測るブロック内では、LEDをtoggleします。消灯中なら点灯させ、点灯中なら消灯させることで、きれいに点滅します。

ledState = !ledState;
digitalWrite(ledPin, ledState);

loopは決して止まらない

点滅と点滅の間もloopは高速で回り続け、センサーやボタンを自由に読み取れます。待機によって処理が停止することはありません。

減算でオーバーフローに対応する

約49日後にmillisは0に戻りますが、減算する方法なら正しい差分を得られるため、タイミング処理はそのまま機能します。

再利用できるパターン

このmillisのパターンは、点滅だけでなく、繰り返し行うあらゆるタスクに使えます。intervalと処理内容を変えれば、どのような処理もスケジュールできます。

確認問題

millisの結果をunsigned longに保存するのはなぜでしょうか。

まとめ

millisのパターンを学びました。最後の時刻を記録し、経過時間を確認してから処理を実行し、時刻をリセットします。これでボードは完全に反応し続けながら点滅できます。🎉

無料で開始

AI チューターと学ぶ C++ — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
30
レッスン
120

よくある質問

「millisでdelayなしに点滅させる」レッスンは無料ですか?

はい。「millisでdelayなしに点滅させる」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Arduino & IoT Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Arduino & IoT Academyコースには全4レッスンが含まれています。

「millisでdelayなしに点滅させる」で何を学びますか?

経過時間を追跡し、予定どおりにタスクを実行します。 ブラウザで直接実行するハンズオンコードでArduino & IoT Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Arduino & IoT Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのArduino & IoT Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「millisでdelayなしに点滅させる」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このArduino & IoT Academyレッスンでコードを書いて実行できますか?

はい。すべてのArduino & IoT Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

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

  1. Arduinoのint、float、bool
  2. delay()ですべてが停止する理由
  3. millisでdelayなしに点滅させる
  4. 2つの処理を同時に実行する
← Arduino & IoT Academyに戻る