Arduino入門:時間関連の関数

ArduinoのSketch(スケッチ)で使用できる時間関連の関数について解説します。

millis

millisは、Arduinoボードがプログラムの実行を開始してから、現在までの経過時間をミリ秒単位で返します。

//Arduino Sketch Example: millis
//Date: 2015.1.18
//Edited and Modified by: easy labo
//Original Source: Arduino Reference (http://arduino.cc/en/Reference/HomePage)

//Syntax
unsigned long millis()

//Parameters: None
//Returns: Number of milliseconds since the program started (unsigned long)

//Description
//Returns the number of milliseconds since the Arduino board began running the current program. This number will overflow (go back to zero), after approximately 50 days.

//Example
unsigned long time;

void setup(){
  Serial.begin(9600);
}
void loop(){
  Serial.print("Time: ");
  time = millis();
  //prints time since program started
  Serial.println(time);
  // wait a second so as not to send massive amounts of data
  delay(1000);
}

Creative Commons Attribution-ShareAlike 3.0 License (CC BY-SA 3.0)
Arduino Reference:millis()” by Arduino Team, used under CC BY-SA 3.0/ easy labo made some changes and comments to the original

上の例では、プログラムがスタートしてからの時間を出力しています。 なお、millisの戻り値は、約50日間でオーバーフローしゼロに戻ります。

micros

microsは、Arduinoボードがプログラムの実行を開始してから、現在までの経過時間をマイクロ秒単位で返します。

//Arduino Sketch Example: micros
//Date: 2015.1.18
//Edited and Modified by: easy labo
//Original Source: Arduino Reference (http://arduino.cc/en/Reference/HomePage)

//Syntax
unsigned long micros()

//Parameters: None
//Returns: Number of microseconds since the program started (unsigned long)

//Description
/*
Returns the number of microseconds since the Arduino board began running the current program. This number will overflow (go back to zero), after approximately 70 minutes. On 16 MHz Arduino boards (e.g. Duemilanove and Nano), this function has a resolution of four microseconds (i.e. the value returned is always a multiple of four). On 8 MHz Arduino boards (e.g. the LilyPad), this function has a resolution of eight microseconds.
*/
//Note: there are 1,000 microseconds in a millisecond and 1,000,000 microseconds in a second.

//Example

unsigned long time;

void setup(){
  Serial.begin(9600);
}
void loop(){
  Serial.print("Time: ");
  time = micros();
  //prints time since program started
  Serial.println(time);
  // wait a second so as not to send massive amounts of data
  delay(1000);
}

Creative Commons Attribution-ShareAlike 3.0 License (CC BY-SA 3.0)
Arduino Reference:micros()” by Arduino Team, used under CC BY-SA 3.0/ easy labo made some changes and comments to the original

上の例では、プログラムがスタートしてからの時間を出力しています。 なお、microsの戻り値は、約70分間でオーバーフローしゼロに戻ります。16MHz動作のArduinoボードでは、micorsの分解能は4マイクロ秒で、戻り値は4の倍数となります。8MHzのボード(LilyPad等)では、8マイクロ秒の分解能となります。

delay

delayは、プログラムを指定時間だけ停止します。設定パラメータは、次の通りです。

ms: 一時停止する時間 (unsigned long)。単位はミリ秒

このパラメータはunsigned long型ですが、32767より大きい整数を指定するときは、値の後ろにULを付け加えます。例 delay(60000UL);

//Arduino Sketch Example: delay
//Date: 2015.1.18
//Edited and Modified by: easy labo
//Original Source: Arduino Reference (http://arduino.cc/en/Reference/HomePage)

//Description
//Pauses the program for the amount of time (in miliseconds) specified as parameter. (There are 1000 milliseconds in a second.)

//Syntax
delay(ms)

//Parameters
//ms: the number of milliseconds to pause (unsigned long)

//Example

int ledPin = 13;                 // LED connected to digital pin 13

void setup()
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
}

void loop()
{
  digitalWrite(ledPin, HIGH);   // sets the LED on
  delay(1000);                  // waits for a second
  digitalWrite(ledPin, LOW);    // sets the LED off
  delay(1000);                  // waits for a second
}

Creative Commons Attribution-ShareAlike 3.0 License (CC BY-SA 3.0)
Arduino Reference:delay()” by Arduino Team, used under CC BY-SA 3.0/ easy labo made some changes and comments to the original

なお、Arduinoボードは、delay中は動作が停止していますが、割り込み処理は有効で、いくつかの処理は同時に実行できます。

delayMicroseconds

delayMicrosecondsは、プログラムを指定時間だけ一時停止します。設定パラメータは、次の通りです。

us: 一時停止する時間。単位はマイクロ秒。

現在の仕様では、16383マイクロ秒以内の値を指定したとき、正確に動作しますが、この仕様は将来のリリースで変更される予定です。ですので、数千マイクロ秒を超える場合はdelay関数を使用する事を推奨します。


//Syntax
delayMicroseconds(us)

//Parameters
//us: the number of microseconds to pause (unsigned int)

//Example
 
int outPin = 8;                 // digital pin 8

void setup()
{
  pinMode(outPin, OUTPUT);      // sets the digital pin as output
}

void loop()
{
  digitalWrite(outPin, HIGH);   // sets the pin on
  delayMicroseconds(50);        // pauses for 50 microseconds      
  digitalWrite(outPin, LOW);    // sets the pin off
  delayMicroseconds(50);        // pauses for 50 microseconds      
}

Creative Commons Attribution-ShareAlike 3.0 License (CC BY-SA 3.0)
Arduino Reference:delayMicroseconds()” by Arduino Team, used under CC BY-SA 3.0/ easy labo made some changes and comments to the original

上の例では、1周期が100マイクロ秒、デューティー50%のパルスを発生させています。

→その他のArduino関連情報

Sponsored Link