数字部分-不用delay函数的blink

有时候你需要同时做两件事情,打个比方,你需要读取按键的时候点亮LED等。这时候,你就不能用delay()函数了,因为Arduino会暂停当程序运行到delay()的时候。如果你按下的时候正好在运行delay()函数,那么你的程序会丢失这个按下的信号。
这个示例将展示如何不用delay()函数来点亮LED。它会点亮LED后记录运行时间,之后每次loop()循环的时候,查看是否要求的点亮时间已经过去。如果是,就会触发LED的开关来进入一段新的时间。这时候LED就会不断运行,不会有任何指令上的问题。
举个简单例子,当你用微波炉热披萨的时候,你也需要等一个重要邮件。你放披萨放进微波炉并且设置10分钟加热,这时候如果你类似用了delay()函数,你就像坐在微波炉前等10分钟一样。这时候如果重要邮件来的话,你就会错过他。
你实际要做的就是真实生活中,把披萨放进微波炉,上好时间,之后就去查看你的邮件,或者做些其他什么事情。然后经常回去看下时候不是微波炉的计时器已经归零,证明pizza已经热好了。
在这个示例中,你会学习到如何设置一个计时器。

硬件需求

—Arduino控制板
—LED
—220欧电阻

电路

clip_image002
来做一个电路,把电阻的一段接到主控板的引脚13,另一端连接LED二极管正极(长的那个脚,也叫阳极)。LED二极管负极(短的那个脚,也叫阴极)接入主控板GND引脚。就像上图展示的那样。
大多数Arduino主控板已经内置了板载LED在他的13号引脚上,如果你没有外接LED的话,你也可以看到板载的LED按照程序运行。

原理图
clip_image004
在你连接好电路之后,把你的控制板用USB数据线连接上电脑,打开Arduino编译器,输入下面的代码。

代码

下面的代码用到了millis()函数,这个函数的功能是在你运行电路时候返回计时(毫秒)。

const int ledPin =  LED_BUILTIN;//定义LED的引脚

//const是常量的意思,不会改变。

int ledState = LOW; // 设置LED的初始状态

//通常来说, 你需要用unsigned long” 来作为存储时间的变量,unsigned long是无符号长整型的意思。

//这个数值一下子会变得很大,int已经不足以存储了。

unsigned long previousMillis = 0; //将存储上一次LED时间的更新

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);

}

}
0
分享到:

评论0

请先

本站资料配套硬件销售店铺:天猫店ultirobot.tmall.com 、三冠淘宝店zhongbest.taobao.com
没有账号? 忘记密码?