Arduino 入門 番外編 16 【時間に関する関数】

arduino-extra-edition-00 Arduino番外編
記事に広告(アフィリエイト広告)が含まれています。
スポンサーリンク

Arduino 入門
番外編 16
【時間に関する関数】

こんにちは管理人のomoroyaです。

arduino 入門 番外編はarduinoの基本的なことを解説している記事です。

 

本記事は、Arduinoで使用する時間に関する関数についてです。

入門編では、使っていない時間の関数もある。

一度まとめて理解しておこう!

ということです。

 

管理人はプログラマーの専門家というわけではありません。

そのため気が向いたときに、テキスト開き、ネットを調べ自己学習。

管理人にとってはブログ記事が自己学習のノートです。

書くことによって頭の中が整理できる。

何よりも、忘れたときに見返せるってのがいいんです!

 

arduino自身のこと、スケッチ(コード、プログラム)を少しづつ理解して行きましょう。

いやいや、arduinoを早速始めたいんだ!というかたは下記の入門編からお読みください。

 

Arduino入門編の解説にて使用しているArduinoは互換品です。

互換品とは言え、Arduinoはオープンソースであり複製して販売するのもライセンス的に問題なし。

そのため互換品の品質も悪くなく、それでいて値段は安いです。

正規品本体の値段程度で豊富な部品が多数ついています。

正規品(Arduino UNO R3)の本体単品がほしい方はこちらとなります。

 

Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)

 

 

スポンサーリンク

時間に関する関数は2つ

時間に関する関数は大きく2つあります。

1つは、Arduinoがプログラム実行を開始したときから現在までの時間を返す関数。

もう一つはプログラムを指定した時間だけ止める関数。

そう、関数の大別としては上記の2つしかありません。

 

時間を返す関数

最初にArduinoがプログラムの実行を開始したときから現在までの時間を返す関数について確認していきます。

こちらの関数は2つあります。

  1. millis()関数
  2. micros()関数

 

mills()関数

プログラム実行開始から現在までの時間をミリ秒単位で返す関数です。

millis()
戻り値:プログラムがスタートしてからの時間、ミリ秒単位。(unsigned long)
使い方例
格納する変数をunsigend longで定義しておく。
unsigned long val;
val = millis();

たったこれだけです。

 

注意点
約50日でオバーフローします。

学習に使っている分には50日も時間を測定していることはないとは思いますが・・・。

 

micros()関数

プログラム実行開始から現在までの時間をマイクロ秒単位で返す関数です。

micros()
戻り値:プログラムがスタートしてからの時間、マイクロ秒単位。(unsigned long)
使い方例
格納する変数をunsigend longで定義しておく。
unsigned long val;
val = micros();

たったこれだけです。

 

注意点
約70分でオバーフローします。

 

時間を返す関数 サンプルスケッチ

サンプルスケッチがこちら。

mills()とmicros()の2つの戻り値を同時にシリアルモニタに表示させて違いを分かるようにしています。

1秒おきにシリアルモニタに値が表示されます。

ミリとマイクロ表示の違いとなります。

桁が約1000倍異なって表示されることがわかるはずです。

//番外編 16 時間に関する関数
//サンプルスケッチ1 時間を返す関数サンプルスケッチ
//https://omoroya.com/

unsigned long time_mil; //変数定義
unsigned long time_mic; //変数定義

void setup() {
  Serial.begin(9600); //シリアル通信のデータ転送レートを9600bpsで指定
}

void loop() {
  time_mil = millis(); //millis()関数の戻り値を変数に格納
  time_mic = micros(); //micros()関数の戻り値を変数に格納

  Serial.print("millis = "); //シリアルモニタに文字列表示
  Serial.println(time_mil);  //シリアルモニタにmillis()の戻り値を表示
  Serial.print("micros = "); //シリアルモニタに文字列表示
  Serial.println(time_mic);  //シリアルモニタにmicros()の戻り値を表示

  delay(1000);               //1000ms止める
}

 

時間を返す関数 サンプルスケッチ 実行結果

「ツール」 ⇒ 「シリアルモニタ」 で確認できます。

下図がシリアルモニタの実行結果。

arduino-extra-edition-16-01

 

ミリ秒とマイクロ秒で桁が約1000倍異なることがわかりますでしょうか?

 

時間を止める関数

次に、Arduinoがプログラムを指定した時間だけ止める関数を確認していきます。

この関数は、入門編のスケッチにもよくでてきます。

 

こちらの関数は2つあります。

お馴染みの関数です。

  1. delay()関数
  2. delayMicroseconds()関数

 

delay()関数

プログラムを指定した時間だけ止めます。

単位はミリ秒単です。

delay(値)
値:単位ミリ秒、unsigned long型
戻り値:なし
使い方例
100ms(0.1秒)プログラムを止める。
delay(100);

入門編のスケッチの中によく出てきますよね。

 

注意点
delay()実行中はセンサの読み取り、ピンの状態変更などの処理はできません。

 

delayMicroseconds()関数

こちらもプログラムを指定した時間だけ止めます。

単位はマイクロ秒単です。

delayMicroseconds(値)
値:単位マイクロ秒、unsigned int型
戻り値:なし
使い方例
100マイクロ秒プログラムを止める。
delayMicroseconds(100);

学習で遊んでいる分には、delay()関数を使うことが多いでしょうか。

 

注意点
delayMicroseconds()実行中はセンサの読み取り、ピンの状態変更などの処理はできません。

 

時間を止める関数 サンプルスケッチ

サンプルスケッチがこちら。

シリアルモニタに”.”を表示させてdelay()とdelayMicroseconds()の違いを体感できるようにしてみました。

1000msごとに”.”を10回表示、1000us毎に”.”を10回表示の比較になります。

1000us毎は早すぎて一瞬ですので違いがわかります。

時間を変えて遊んでみてください。

//番外編 16 時間に関する関数
//サンプルスケッチ2 時間を止める関数 サンプルスケッチ
//https://omoroya.com/

unsigned long time_mil = 1000; //1000ms(1s)変数定義
unsigned int  time_mic = 1000; //1000μs(1ms)変数定義

void setup() {
  Serial.begin(9600); //シリアル通信のデータ転送レートを9600bpsで指定
}

void loop() {
  
  Serial.println("delay start");   //シリアルモニタに文字列表示
  for(int i=0; i<10; i++){         //for文内を10回繰り返す
    delay(time_mil);               //1000ms止める
    Serial.print(".");             //シリアルモニタに.を表示
  }
  Serial.println("\ndelay end");   //シリアルモニタに文字列表示
  
  Serial.println("\ndelayMicro start"); //シリアルモニタに文字列表示
  for(int i=0; i<10; i++){            //for文内を10回繰り返す
    delayMicroseconds(time_mic);      //1000μs止める
    Serial.print(".");                //シリアルモニタに.を表示。
  }
  Serial.println("\ndelayMicro end\n"); //シリアルモニタに文字列表示
  
}

 

時間を止める関数 サンプルスケッチ 実行結果

「ツール」 ⇒ 「シリアルモニタ」 で確認できます。

下図がシリアルモニタの実行結果。

arduino-extra-edition-16-02

 

図だと違いが表現できません・・・。

ぜひ、上記スケッチを実行してみてください。

ミリ秒とマイクロ秒の違い体感できます。

 

まとめ

Arduino 入門 番外編 16 【時間に関する関数】

いかがだったでしょうか?

 

知っているようで知らない関数。

ちょっと分かりづらい関数。

使ったことのない関数。

などなど、これからも解説していきます。

あくまでも、プログラマーではない管理人目線ですが・・・。

 

次回の番外編も、スケッチについて情報を発信したいと考えています。

 

最後に

疑問点、質問などありましたら気軽にコメントください。

この電子部品の解説をしてほしい!などなどなんでもOKです。

リンク切れ、間違いなどあればコメントいただけると助かります。

 

Arduino入門編、番外編、お役立ち情報などなどサイトマップで記事一覧をぜひご確認ください。

 

Arduino入門編Arduino入門編2で使用しているUNOはAmazonにて購入可能です。

Arduino入門編では互換品を使用。

Arduinoはオープンソース。

複製して販売するのもライセンス的に問題なし。

 

そのため互換品の品質も悪くなく、それでいて値段は安いです。

正規品本体の値段程度で豊富な部品が多数ついています。

 

学習用、遊び用、お試し用には安価な互換品がおすすめです。

 

上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。

 

Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)

 

Amazonでお得に買う方法

Amazonでお得に購入するならAmazon MastercardAmazonギフト券がおすすめです。

時期により異なりますが、様々なキャンペーンを実施しています。

\Amazonギフト券/
Amazonギフトカード キャンペーン

Amazon Mastercard お申込み
Amazon Mastercard 申し込み 

 

いずれの場合もプライム会員である方がお得!!

\Amazon Prime 30日間の無料会員を試す/
無料会員登録 

 

 

コメント

タイトルとURLをコピーしました