时间
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()的数值将不会继续变化。
参数 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)值和引脚状态会保持,中断也会按设定的执行。
但某些操作在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()不再会使中断失效。
Arduino0018版本后,delayMicroseconds()不再会使中断失效。