こんばんは!
今回は今回はArduinoでプログラムの経過時間を測れる関数「micros()」についてです。
micros()
micros()はArduinoボードがプログラムの実行を開始してからの経過時間をマイクロ秒(μs)で返します。
millis()と同様に経過時間を表示したい場合や経過時間に応じて処理をしたい場合などに使われます。
マイクロは10の-6乗なので、1,000マイクロ秒は1ミリ秒、1,000,000マイクロ秒は1秒となります。
16 MHzのArduinoボード、例えばArduino UNO,Arduino Mega,Arduino Leonarsdoでは、この関数の分解能は4マイクロ秒です。
分解能というのは装置などで対象を測定または識別できる能力のことで、目的とする制御量と同じか、もしくはそれ以上にしなければいけません。
つまり、1マイクロ秒での制御をしようと思った場合(arduinoでするのかはわかりませんが)、64MHz以上のArduinoボードを使用しなければいけません。
スケッチ例
1 2 3 4 5 6 7 8 9 10 11 | unsigned long tm; void setup() { Serial.begin(9600); } void loop() { tm = micros() / 1000000; Serial.print(tm); Serial.print(","); delay(1000); } |
というように経過時間を計測できます。
オーバーフロー
micros()はプログラムの経過時間を計測することができます。
しかしmicros()はunsigned long intであるため0~(2の32乗 - 1)マイクロ秒、つまり0マイクロ秒から4294967295マイクロ秒までしか測ることができません。
4294967295マイクロ秒は
4,294,967,295/1000/1000/60≒71.6分
なので1時間12分後に値が0に戻ってしまいます、これをオーバーフローといいます。1時間以上に動作するものではこのオーバーフローによって誤動作をしてしまうので注意が必要です。