当前位置: 首页 > 工具软件 > Arduino101 > 使用案例 >

arduino 读取当前时间_Arduino 101/Genuino 101 时间控制函数

山翼
2023-12-01

时间控制函数

运行时间函数

使用运行时间函数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]

 类似资料: