Arduinoのloopはどのくらいの周期で呼び出されるのでしょうか?
気になってみたので手元にあった2つのArduinoで計測してみました。
- Arduino Uno R3
- Arduino Nano Every
動かすスケッチ
スケッチ
#include <Arduino.h>
#define NUM_LOOPS 100 // 100周分を計測する
int numLoops = NUM_LOOPS;
unsigned long loopTime[NUM_LOOPS];
void setup()
{
// 初期化処理
Serial.begin(9600);
}
void loop()
{
loopTime[numLoops] = micros();
if(numLoops > 0)
{
numLoops--;
}
else
{
// 100周期終了後に合計実行時間を出力
for(int i = NUM_LOOPS; --i >= 0;)
{
Serial.println(loopTime[i]);
}
while(true)
{
// 無限ループでプログラムを停止
}
}
}
やっていること
loop()
が呼び出されるたびにloopTime
にその時の時刻を記録します。そして、
100個のデータがたまったらシリアルモニタに出力します。
シリアル出力は非常に時間がかかるのでこのような処理にしています。
時刻の取得時間やデクリメントの時間は考慮していませんが、大体のloopの呼び出し周期はわかると思います。
Arduino Uno R3
呼び出し周期は以下のようになりました。
呼び出し周期が4,8,4,4,8,4,…と規則的な結果になっています。
Arduino Nano Every
呼び出し周期は以下のようになりました。
呼び出し周期が8μsと一定の結果になっています。
結果
Arduino Uno Rev3のように動作周波数が16Hzのボードでは、microsの分解能は4μsです。
平均すると1周期は5.3μsくらいでしょうか。
コメント