Arduino でマイクロ秒単位の遅延を追加する

Ammar Ali 2023年10月12日
Arduino でマイクロ秒単位の遅延を追加する

このチュートリアルでは、Arduino で delayMicroseconds() および micros() 関数を使用して、コードにマイクロ秒単位の遅延を追加する方法について説明します。

Arduino でマイクロ秒単位の遅延を追加する

Arduino では、特定の時間にタスクを実行する必要がある場合があります。 たとえば、LED を点滅させたい場合は、LED を特定の時間 (1 秒間など) オンにしてからオフにする必要があります。

Arduino の delayMicroseconds() 関数を使用して、マイクロ秒単位で遅延を追加できます。 たとえば、特定の時間間隔でシリアル モニターにいくつかの数値を出力する必要があるとします。

遅延を追加せずに数値を直接印刷すると、マイクロコントローラーが高速であるため、数値が非常に高速に印刷され、プロセスが表示されなくなります。 コードに遅延を追加すると、遅延に応じて数値が出力されます。

数字が1つ印刷されます。 プログラムは遅延を待ち、次の番号が出力されます。

たとえば、シリアル モニター ウィンドウに乱数を出力し、コードにマイクロ秒単位の遅延を追加してみましょう。

例:

long MyRnd;

void setup() {
  Serial.begin(9600);
  randomSeed(analogRead(0));
}
void loop() {
  MyRnd = random(100);
  Serial.println(MyRnd);
  delayMicroseconds(1000);
}

上記のコードに 1000 マイクロ秒の遅延を追加しました。 delayMicroseonds() 関数の入力は符号なし整数で、関数内で渡すことができる最大数は 16383 です。

より大きな値を追加すると、コードで非常に短い遅延が発生します。 関数は何も返しません。

ミリ秒単位で遅延を追加したい場合は、delay() 関数を使用できます。 この関数の入力は unsigned long データ型であるため、delay() 関数を使用して長い遅延を追加できます。

プログラムに遅延を追加すると、他のすべてのプロセスはセンサー入力のように停止しますが、割り込みは PWM のように機能することに注意してください。 この問題を解決するために、Arduino ボードが実行を開始したときに mc で経過した時間を確認するために使用される micros() 関数を使用できます。

たとえば、Arduino ボードが実行を開始してからの時間をマイクロ秒単位で確認するために、micros() 関数を使用してみましょう。

例:

void setup() { Serial.begin(9600); }
void loop() {
  Serial.println(micros());
  delay(1000);
}

出力:

1060
1001852
2003016
3004172

delay() 関数を使用してコードに遅延を追加し、コード内の出力を確認しました。 micros() 関数の前のコード行を実行するのに 1060 マイクロ秒かかりました。

命令の実行にかかる時間は、Arduino ボードの種類によって異なります。これは、ボードによって周波数が異なるためです。 ミリ秒単位で時間を記録するには、millis() 関数を使用できます。

millis() および micros() 関数は、Arduino で実行されている他のプロセスを停止しません。 delay() および delayMicroseconds() 関数と同じタスクを実行するために、条件付きステートメントでそれらを使用できます。

millis() 関数を使用して時間を確認し、if ステートメントを使用して特定の時間だけタスクを実行できます。

たとえば、シリアル モニターにテキストを出力し、1 秒間隔でテキストを出力するために 1 秒の遅延を追加してみましょう。

例:

long t1 = 0;
long t2 = 0;
long t;
void setup() { Serial.begin(9600); }
void loop() {
  t1 = millis();
  t = t1 - t2;
  if (t > 1000) {
    Serial.println("Hello World");
    t2 = t1;
  }
}

出力:

Hello World
Hello World
Hello World

上記のコードの時間間隔の差を使用して、経過時間を取得しました。 時間が 1 秒または 1000 ミリ秒より大きい場合は、テキストを出力し、2 番目の時間間隔を最初の時間間隔に変更して差をゼロにします。

出力は、テキストがシリアル モニター ウィンドウに 1 秒の時間差で印刷されていることを示しています。

著者: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook