Arduino使用millis()函数实现延时闪灯
原博参考链接
https://www.yiboard.com/thread-1178-1-1.html
1.什么是millis()函数
此函数用于返回Arduino板开始运行当前程序时的毫秒数。这个数字在大约50天后溢出,即回到零。因此简单的闪灯使用它是毫无问题的。
2.为什么不用delay()
delay()函数会暂停程序延迟函数传递的时间。因此,如果我们给出1秒的延迟,则处理器在1秒钟之前不能进入下一条指令。类似地,如果延迟是10秒,则程序将停止10秒,并且处理器将不允许进行下一指令,直到10秒过去。这妨碍了微控制器在速度和执行指令方面的性能,很浪费CPU,在需要完成延时的同时执行其他任务的话会发生阻塞。
3.怎么用?
要使用millis()进行计时和延迟,需要记录并存储操作开始时间的时间,然后定期检查定义的时间是否已过。 如上所述,将当前时间存储在变量中。
4.代码
在.h文件中定义一个闪灯函数:
/* 利用millis()函数做成闪灯效果的函数 */
unsigned long previousMillis;
int ledState;
void ledBlink( int ledPin, uint32_t period )
{
unsigned long currentMillis = millis(); /* 记录当前时间 */
if ( currentMillis - previousMillis >= period ) /* 检查 "period" ms是否通过 */
{
ledState = digitalRead( ledPin );
previousMillis = currentMillis; /* 保存上次闪烁LED时 */
if ( ledState == LOW ) /* 如果LED关闭,则打开,反之亦然 */
{
ledState = HIGH;
} else {
ledState = LOW;
}
digitalWrite( ledPin, ledState ); /* LED为ledState状态 */
}
}
之后再主函数中调用这个函数,就可以实现闪灯了。
ledBlink( PA6, 250 );//这里就是主函数调用闪灯程序
//其中,PA6表示接着led灯的IO口,250表示每250ms变一次灯的状态