时间

millis()

描述:
返回Arduino开发板从运行当前程序开始的毫秒数。这个数字将在约50天后溢出(归零)。
参数:

返回值:
返回从运行当前程序开始的毫秒数(无符号长整数)。
例子:

unsigned long time;
 
void setup(){
  Serial.begin(9600);
}
void loop(){
  Serial.print("Time: ");
  time = millis();
  //打印从程序开始到现在的时间
  Serial.println(time);
  // 等待一秒钟,以免发送大量的数据
  delay(1000);
}
提示:
参数 millis 是一个无符号长整数,试图和其他数据类型(如整型数)做数学运算可能会产生错误。 当中断函数发生时,millis()的数值将不会继续变化。

micros()

描述:
返回Arduino开发板从运行当前程序开始的微秒数。这个数字将在约70分钟后溢出(归零)。在 16MHz 的 Arduino 开发板上(比如 Duemilanove 和 Nano),这个函数的分辨率为四微秒(即返回值总是四的倍数)。在 8MHz 的 Arduino 开发板上(比如 LilyPad),这个函数的分辨率为八微秒。

每毫秒是1,000微秒,每秒是1,000,000微秒。

参数:

返回值:
返回从运行当前程序开始的微秒数(无符号长整数)。
例子:

unsigned long time;
 
void setup(){
  Serial.begin(9600);
}
void loop(){
  Serial.print("Time: ");
  time = micros();
  //打印从程序开始的时间
  Serial.println(time);
  // 等待一秒钟,以免发送大量的数据
  delay(1000);
}

delay()

描述:
使程序暂定设定的时间(单位毫秒)。(一秒等于1000毫秒)
语法:

delay(ms)

参数:
ms:暂停的毫秒数(unsigned long)
返回值:

例子:

int ledPin = 13;                 // LED接到数字引脚13号
 
void setup()
{
  pinMode(ledPin, OUTPUT);      // 设置引脚为输出
}
 
void loop()
{
  digitalWrite(ledPin, HIGH);   // 点亮LED
  delay(1000);                  //等待1秒
  digitalWrite(ledPin, LOW);    //灭掉LED
  delay(1000);                  // 等待1秒
}
虽然创建一个使用delay()的闪烁LED很简单,并且许多例子将很短的delay用于消除开关抖动,delay()确实拥有很多显著的缺点。在delay函数使用的过程中,读取传感器值、计算、引脚操作均无法执行,因此,它所带来的后果就是使其他大多数活动暂停。其他操作定时的方法请参加millis()函数和它下面的例子。大多数熟练的程序员通常避免超过10毫秒的delay(),除非arduino程序非常简单。
但某些操作在delay()执行时任然能够运行,因为delay函数不会使中断失效。通信端口RX接收到得数据会被记录,PWM(analogWrite)值和引脚状态会保持,中断也会按设定的执行。

delayMicroseconds()

描述:
使程序暂停指定的一段时间(单位:微秒)。一秒等于1000000微秒。 目前,能够产生的最大的延时准确值是16383。这可能会在未来的Arduino版本中改变。对于超过几千微秒的延迟,你应该使用delay()代替。
语法:

delayMicroseconds(us)

参数:
us:暂停的时间,单位微秒(unsigned int)
返回值:

例子:
将8号引脚配置为输出脚。它会发出一系列周期100微秒的方波。

int outPin = 8;                 // 数字引脚 8
 
void setup()
{
  pinMode(outPin, OUTPUT);      //设置为输出的数字引脚
}
 
void loop()
{
  digitalWrite(outPin, HIGH);   // 设置引脚高电平
  delayMicroseconds(50);        // 暂停50微秒      
  digitalWrite(outPin, LOW);    // 设置引脚为低电平
  delayMicroseconds(50);        // 暂停50微秒      
}
此函数在3微秒以以上工作的非常准确。我们不能保证,delayMicroseconds在更小的时间内延时准确。
Arduino0018版本后,delayMicroseconds()不再会使中断失效。