时间控制函数
运行时间函数
使用运行时间函数millis(),能获取Arduino通电后(或复位后)到现在的时间。
[mw_shl_code=cpp,true]millis()[/mw_shl_code]
返回系统运行时间,单位毫秒。
返回值是uint64_t类型。
[mw_shl_code=cpp,true]micros()[/mw_shl_code]
返回系统运行时间,单位微秒。
返回值是uint64_t类型。
在不同型号的Arduino上,运行时间函数的精度也不同,在Genuino 101上,精度为2微秒。
使用以下程序会将系统运行时间输出到串口,你可以通过串口监视器观察到程序运行时间。
[mw_shl_code=cpp,true]/*
获取系统运行时间
*/
unsigned long time1;
unsigned long time2;
void setup(){
Serial.begin(9600);
}
void loop(){
time1 = millis();
time2 = micros();
// 输出系统运行时间
Serial.print(time1);
Serial.println("ms");
Serial.print(time2);
Serial.println("us");
// 等待1秒开始下一次loop循环
delay(1000);
}[/mw_shl_code]
延时函数
在之前的Blink程序中,我们通过使用延时函数,使LED按一定频率闪烁。
Arduino提供了毫秒级和微秒级两种延时函数。运行延时函数时,会等待指定的时间,再运行此后的程序。你可以通过参数设定延时时间。
[mw_shl_code=cpp,true]delay( uint32_t dwMs )[/mw_shl_code]
毫秒级延时。
参数数据类型为uint32_t。
[mw_shl_code=cpp,true]delayMicroseconds( uint32_t dwUs )[/mw_shl_code]
微秒级延时。
参数数据类型为uint32_t。
Genuino 101上的延时操作精度为+-0.5微秒。
RTC函数
我们已经知道使用Arduino的运行时间函数millis()、micros() 可以获取到Arduino的运行时间,但很多场合我们需要记录年月日时分秒等日期信息,使用arduino原有的时间函数会非常不便。解决该问题的普遍方法,就是外接一个RTC(Real-Time Clock,即实时时钟)芯片,Intel Curie内置有RTC,它能准确的记录日期信息。
要使用RTC功能,我们需要先引用CurieTime.h头文件:
[mw_shl_code=cpp,true]#include [/mw_shl_code]
CurieTime中设置时间就一个函数:
[mw_shl_code=cpp,true]setTime(时,分,秒,日,月,年);[/mw_shl_code]
设置好时间后,可以通过以下6个函数获取时间信息:
[mw_shl_code=cpp,true]year();
month();
day();
hour();
minute();
second();[/mw_shl_code]
例程程序如下:
[mw_shl_code=cpp,true]/*
Curie RTC例程
http://www.arduino.cn/
*/
#include
void setup() {
while (!Serial);
Serial.begin(9600);
// 将时间设为2016年6月25日18点27分
setTime(18, 27, 00, 24, 6, 2016);
}
void loop() {
Serial.print("Time now is: ");
print2digits(hour());
Serial.print(":");
print2digits(minute());
Serial.print(":");
print2digits(second());
Serial.print(" ");
Serial.print(day());
Serial.print("/");
Serial.print(month());
Serial.print("/");
Serial.print(year());
Serial.println();
delay(1000);
}
// 生成占位用的字符“0”
void print2digits(int number) {
if (number >= 0 && number < 10) {
Serial.print('0');
}
Serial.print(number);
}
[/mw_shl_code]