delay()
関数とdelayMicroseconds()
関数は、Arduinoでのプログラムの実行を一時的に停止するために使われる関数です。これらの関数は、特定の時間待機することで、タイミングを調整したり、信号の間隔を制御したりするのに役立ちます。それぞれの関数の違いと使い方について詳しく説明します。
ArduinoIDE delay()関数とdelayMicroseconds()関数
delay()関数
delay()
関数は、指定したミリ秒(ms)だけプログラムの実行を一時停止します。ミリ秒は、1秒の1000分の1です。この関数は、比較的長い待機時間が必要な場合に使用します。
基本的な使い方
void setup() {
// 初期化処理
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // LEDを点灯
delay(1000); // 1秒待つ
digitalWrite(LED_BUILTIN, LOW); // LEDを消灯
delay(1000); // 1秒待つ
}
この例では、LEDが1秒間点灯し、次に1秒間消灯する動作を繰り返します。delay(1000)
は、プログラムの実行を1000ミリ秒(1秒)停止させます。
特徴
- 単位: ミリ秒(1秒 = 1000ミリ秒)
- 範囲: 0から4,294,967,295ミリ秒(約49.7日)まで(
unsigned long
型の範囲) - 精度: ミリ秒単位で、精度はシステムのクロックに依存します。通常、非常に正確ですが、短い時間の遅延ではわずかな誤差が生じることがあります。
delayMicroseconds()関数
delayMicroseconds()
関数は、指定したマイクロ秒(μs)だけプログラムの実行を一時停止します。マイクロ秒は、1秒の100万分の1です。この関数は、より短い時間待機する必要がある場合に使用します。
基本的な使い方
void setup() {
// 初期化処理
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // LEDを点灯
delayMicroseconds(500); // 500マイクロ秒待つ
digitalWrite(LED_BUILTIN, LOW); // LEDを消灯
delayMicroseconds(500); // 500マイクロ秒待つ
}
この例では、LEDが500マイクロ秒間点灯し、次に500マイクロ秒間消灯する動作を繰り返します。delayMicroseconds(500)
は、プログラムの実行を500マイクロ秒(0.5ミリ秒)停止させます。
特徴
- 単位: マイクロ秒(1秒 = 1,000,000マイクロ秒)
- 範囲: 0から1,000,000マイクロ秒(1秒)まで(
unsigned int
型の範囲) - 精度: マイクロ秒単位で、より短い時間の遅延が可能です。Arduinoのクロックによって精度が変わるため、非常に短い遅延では、精度が若干低下することがあります。特に、16MHzのArduinoでは、約3マイクロ秒の最低遅延が必要です。
delay()とdelayMicroseconds()の比較
特徴 | delay() | delayMicroseconds() |
---|---|---|
単位 | ミリ秒(ms) | マイクロ秒(μs) |
最小遅延時間 | 約1ミリ秒(1ms) | 約3マイクロ秒(3μs) |
最大遅延時間 | 約49.7日(4,294,967,295ms) | 約1秒(1,000,000μs) |
精度 | ミリ秒単位で、通常は高精度 | マイクロ秒単位で、クロックに依存した精度 |
用途 | 長い遅延、定期的なイベントや待機処理に使用 | 高速なタイミング制御、パルス生成などに使用 |
使い分け
delay()
: 長い間隔で待機が必要な場合(例: LEDの点滅、センサーの待機など)。例えば、1秒以上の待機や、数十ミリ秒の待機に適しています。delayMicroseconds()
: 非常に短い間隔で待機が必要な場合(例: パルス幅の制御、タイミングの調整など)。例えば、数マイクロ秒から数百マイクロ秒の待機が必要な場合に適しています。
注意点
- タイミング精度:
delayMicroseconds()
は非常に短い間隔のタイミング調整が可能ですが、精度はArduinoのクロック速度に依存します。delay()
は、比較的長い待機時間に向いていますが、ミリ秒単位での精度です。 - タイミングの影響:
delay()
やdelayMicroseconds()
を使用している間、Arduinoは他の処理を実行しません。複数のタイミングが要求される複雑なプロジェクトでは、タイミングを管理するためにタイマや割り込みを使用することも考慮するべきです。
これらの関数を理解し、用途に応じて使い分けることで、Arduinoでのプログラムの精度と効率を高めることができます
コメント