どうも、なかしーです。
僕は自動車のマイコンにプログラミングをする組み込みエンジニアとして働きつつ、YouTubeでArduinoの使い方を解説しています。
>>なかしーの電子工作部
Arduinoでプログラムを実行してからの経過時間を調べる方法を知りたいなぁ
という悩みにお答えします。
時間を計測しようとdelay関数で処理を遅延させて、変数をインクリメントすれば経過時間を調べることができますが、遅延することで他の処理へ影響があると思います。
void loop() {
delay(1000); //1秒待機
count++;
}
Arduinoはdelay関数と変数のインクリメント以外にも経過時間を調べる方法があります。
この記事では「Arduinoで時間計測や割り込みを行う方法」について解説します。
ちなみに、動画でも解説しています!
Arduinoで時間を調べる方法
ディレイ以外で時間を調べる方法は次の2つあります。
- millis()・・・ミリ単位(約50日まで)
- micros()・・・マイクロ単位(約70分まで)
どちらとも引数はなしで、戻り値はunsigned long型となっています。
Arduinoで時計のように時間を表示する
millis関数を使い、Arduinoでデジタル時計のように表示するプログラムを作ってみます。
1000msで1秒なので、millis関数の戻り値を1000で割ると秒数が分かります。
あとは秒数から分や時間を計算すれば時計を作ることが出来ます。
unsigned long time_data = 0;
unsigned long second = 0;
unsigned long minute = 0;
unsigned long hour = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
time_data = millis();
if((time_data % 1000) == 0) {
second = time_data / 1000;
minute = second / 60;
hour = minute / 60;
Serial.print(hour);
Serial.print(":");
Serial.print(minute);
Serial.print(":");
Serial.println(second);
}
}
実行すると1秒ごとにシリアルモニタへ「時:分:秒」とデータを送信します。
Arduinoで時間割り込みを行う方法
他の処理を実行していたとしても、必ず一定周期で実行したい関数があるのであれば時間割り込みを使うと良いでしょう。
時間割り込みの関数はダウンロードが必要です。
Arduino IDEの「ツールタブ」からライブラリ管理を開いて「MsTimer2」と検索し、インストールしてください。
MsTimer2は引数に割り込みたい秒数をミリ単位で入力し、割り込み時に実行する関数を指定します。
startで割り込みが有効になり、stopで割り込みが無効化されます。
1秒ごとに割り込みが発生し、その時にカウントしたデータをシリアルモニタへ送信するプログラムを作ってみました。
#include "MsTimer2.h"
unsigned long time_data = 0;
void time_count(void);
void setup() {
Serial.begin(9600);
MsTimer2::set(1000, time_count);
MsTimer2::start();
}
void loop() {
}
void time_count(void) {
time_data++;
Serial.println(time_data);
}
Arduinoで時間計測や割り込みを行う方法|まとめ
この記事では「Arduinoで時間計測や割り込みを行う方法」について紹介しました。
プログラムが開始されてから経過した時間を調べたい時は
- millis()・・・ミリ単位(約50日まで)
- micros()・・・マイクロ単位(約70分まで)
一定周期ごとに割り込みを行うときは、MsTimer2を使います。
Arduino関連の人気記事
>>【Arduino入門キット】電子工作の勉強におすすめ【こんなに安くていいの?】
>>Arduinoでできることを紹介【逆にできないことは何?】
当ブログで人気のArduino入門キット