目次
㎳単位で動作を停止させる(delay)
[Arduino] delayの使い方を考える。 – Qiita
μs単位で動作を停止させる(delayMicroseconds)
delayMicroseconds()
関数は、Arduinoで短い時間(マイクロ秒単位)だけプログラムの実行を停止するための関数です。これを使うと、非常に細かい時間制御が可能になります。特にタイミングが重要なプロジェクトや、高速な処理を必要とするケースで役立ちます。
delayMicroseconds()
関数の構文
cpp
コードをコピーする
void delayMicroseconds(unsigned int us);
引数の説明
us
: 停止する時間をマイクロ秒(μs)単位で指定します。1マイクロ秒は1,000,000分の1秒です。
使用例
次の例では、LEDを1ミリ秒(1000マイクロ秒)ごとに点滅させます。
cpp
コードをコピーする
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // LEDをONにする
delayMicroseconds(1000); // 1000マイクロ秒(1ミリ秒)待つ
digitalWrite(LED_BUILTIN, LOW); // LEDをOFFにする
delayMicroseconds(1000); // 再度1ミリ秒待つ
}
このコードは、1ミリ秒ごとにLEDの状態を切り替えることで、点滅するLEDを作り出します。delayMicroseconds(1000)
は delay(1)
とほぼ同じ動作ですが、より短い時間(例えば数十マイクロ秒単位)を扱うことができるのが特徴です。
注意点
- Arduinoのクロック速度に依存します。例えば、標準的なArduino Unoは16MHzで動作しているため、非常に短い時間(数マイクロ秒未満)を正確に制御することは難しい場合があります。
delayMicroseconds()
は約3μs以上の遅延に対しては比較的正確ですが、それより短い時間では、関数のオーバーヘッドにより正確な遅延が保証されないことがあります。- 極端に短い遅延(1μsや2μs)は、CPUがその間に必要な処理を行えないため、実際の遅延時間が期待通りにならない場合があります。
高速な処理が必要な場合
例えば、通信プロトコル(SPIやI2Cのビットバンギングなど)や高精度のパルス生成が必要な場合に、delayMicroseconds()
が役立ちます。
例: 特定の時間間隔でパルスを生成
cpp
コードをコピーする
void setup() {
pinMode(9, OUTPUT); // デジタルピン9を出力モードに設定
}
void loop() {
digitalWrite(9, HIGH); // ピン9をHIGHに
delayMicroseconds(10); // 10マイクロ秒待機
digitalWrite(9, LOW); // ピン9をLOWに
delayMicroseconds(10); // さらに10マイクロ秒待機
}
このコードは、10マイクロ秒ごとにピン9の状態を切り替えることで、50kHzのパルス波形を生成します。
まとめ
delayMicroseconds()
は、非常に短い時間単位で動作を制御する必要がある場合に使用される強力なツールです。特に、センサの応答時間やタイミングに依存する処理において、精密な時間制御が求められるときに役立ちますが、非常に短い遅延には限界があることを覚えておくと良いでしょう。