Arduinoで時間計測や割り込みを行う方法【ディレイなしで】

どうも、なかしーです。

僕は自動車のマイコンにプログラミングをする組み込みエンジニアとして働きつつ、YouTubeでArduinoの使い方を解説しています。
>>なかしーの電子工作部

Arduino初心者
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をゼロから勉強する方法【参考書は不要】

当ブログで人気のArduino入門キット

第1位:ELEGOO Arduino用UNO R3スターターキット
僕も使っているArduino UNOのスタータキットです。電子工作でよく使う部品が一式揃っており、バラバラで購入するより格段に安いです。日本語のチュートリアルも付いていて親切です。
第2位:Kuman Arduinoをはじめよう R3ボード スターターキット
こちらも電子工作によく使う部品がたくさん入っています。第1位と違ってマトリクスLEDやタッチセンサも入っています。
第3位:ELEGOO Arduino用のUNO R3 最終版スタータキット
第1位の入門キットに入っている部品をより豪華にしたのがこちらです。これだけ入っていれば十分に電子工作の基本をマスターできることでしょう。
エンジニアが教えるArduino入門講座のまとめ【解説動画付き】