有时候你需要同时做两件事情,打个比方,你需要读取按键的时候点亮LED等。这时候,你就不能用delay()函数了,因为Arduino会暂停当程序运行到delay()的时候。如果你按下的时候正好在运行delay()函数,那么你的程序会丢失这个按下的信号。
这个示例将展示如何不用delay()函数来点亮LED。它会点亮LED后记录运行时间,之后每次loop()循环的时候,查看是否要求的点亮时间已经过去。如果是,就会触发LED的开关来进入一段新的时间。这时候LED就会不断运行,不会有任何指令上的问题。
举个简单例子,当你用微波炉热披萨的时候,你也需要等一个重要邮件。你放披萨放进微波炉并且设置10分钟加热,这时候如果你类似用了delay()函数,你就像坐在微波炉前等10分钟一样。这时候如果重要邮件来的话,你就会错过他。
你实际要做的就是真实生活中,把披萨放进微波炉,上好时间,之后就去查看你的邮件,或者做些其他什么事情。然后经常回去看下时候不是微波炉的计时器已经归零,证明pizza已经热好了。
在这个示例中,你会学习到如何设置一个计时器。
硬件需求
—Arduino控制板
—LED
—220欧电阻
电路
来做一个电路,把电阻的一段接到主控板的引脚13,另一端连接LED二极管正极(长的那个脚,也叫阳极)。LED二极管负极(短的那个脚,也叫阴极)接入主控板GND引脚。就像上图展示的那样。
大多数Arduino主控板已经内置了板载LED在他的13号引脚上,如果你没有外接LED的话,你也可以看到板载的LED按照程序运行。
原理图
在你连接好电路之后,把你的控制板用USB数据线连接上电脑,打开Arduino编译器,输入下面的代码。
下面的代码用到了millis()函数,这个函数的功能是在你运行电路时候返回计时(毫秒)。
const int ledPin = LED_BUILTIN;//定义LED的引脚
//const是常量的意思,不会改变。
int ledState = LOW; // 设置LED的初始状态
//通常来说, 你需要用“unsigned long” 来作为存储时间的变量,unsigned long是无符号长整型的意思。
//这个数值一下子会变得很大,int已经不足以存储了。
const long interval = 1000; //闪缩间隔(毫秒)
void setup() {
//设置数字引脚输出模式
pinMode(ledPin, OUTPUT);
}
void loop() {
unsigned long currentMillis = millis();
//判断计时器是否满足条件
if (currentMillis - previousMillis >= interval) {
//保存上次点亮LED的时间
previousMillis = currentMillis;
//如果LED关闭了就把它点亮,反之亦然
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
//按照变量状态来设置LED
digitalWrite(ledPin, ledState);
}
}
请先
!