Arduino Unoにおいて、timer1ライブラリの動作を確かめたく、以下の内容を動作させています。
: intervalの間隔ごとにgetTimeを呼び出す。
: getTimeは、前回呼び出された時からの経過時間をシリアルに出力する。(出力の値をPCより確認。)
intervalの値が8,000μ秒より大きい時は、結果として8000が連続して表示されます。(期待通りの結果。)
しかし、intervalの値がこれ以下の場合、期待通りの結果が得られません。
(8000が境界という訳ではありません。8000-7000の間に境界があります。)
getTime1回の実行に、(例えば)5000μ秒秒以上かかっているのであれば、
intervalを5000μ秒とした場合にこのような結果になることは理解できますが、
実際に実行に5,000μ秒以上かかっているとは考えにくいと思います。
原因が思いつかず、ご教示頂けますと幸いです。
(最終的には、Arduino Unoで0.0003125秒に一回の間隔(3200Hz)でデータを取得したいと考えております。
#include <TimerOne.h> #define interval 8000 unsigned long timeA=0; unsigned long timeB=0; unsigned long timeC=0; void setup() { // ログ出力シリアル通信初期化 Serial.begin(9600); Timer1.initialize(interval); //1000μ秒待機 Timer1.attachInterrupt(getTime); } void getTime() { timeA = micros(); timeC = timeA - timeB; Serial.println(timeC); timeB = timeA; } void loop() { }
#define interval 8000とした場合のシリアルモニタ表示。(期待通り。) 8000 8000 8000 8000 8000 8000 8000 8000 8000
#define interval 5000とした場合のシリアルモニタ表示。(期待通りでない。) 4294966336 192 80 64 64 64 64 64 64 64 64 64 64 64

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。