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%のパルスを発生させています。
Sponsored Link