millisでdelayなしに点滅させる
経過時間を追跡し、予定どおりにタスクを実行します。
「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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Arduinoのint、float、bool
- delay()ですべてが停止する理由
- millisでdelayなしに点滅させる
- 2つの処理を同時に実行する