Arduinoと戯れてみる!

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

arduino-extra-edition-00Arduino番外編
スポンサーリンク

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

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

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

 

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

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

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

ということです。

 

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

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

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

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

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

 

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

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

 

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

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

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

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

 

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

 

スポンサーリンク

時間に関する関数は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入門編で使用しているUNOはAmazonにて購入可能です。

互換品とは言え、Arduinoはオープンソース。

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

 

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

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

 

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

 

 

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

 

Amazonでお得に買う方法

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

現金でチャージするたびに、チャージ額に応じたポイントが付与されます。

最大2.5%!!!(Amazonプライム会員ならさらにお得)

チャージ額(一回分)一般プライム会員
5,000円~19,999円0.5%1.0%
2,0000円~39,999円1.0%1.5%
40,000円~89,999円1.5%2.0%
90,000円~2.0%2.5%

さらに、初回チャージで2000ポイントもらえるキャンペーンも実施中!
※いつもは1000ポイント、今なら2000ポイントです!

\Amazonギフト券 2000ポイントキャンペーン/
Amazonチャージ 初回購入で2000ポイントキャンペーン

 

補足情報
コンビニ・ATM・ネットバンクが対象
購入は1円単位で可能

コメント

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