求教:用人体热释制作感应灯实验(程序为网上下载用于学习,自己添加了时间控制函数),
为何设定了无动作时的等待时间如1分钟后灯无法自动熄灭,小白一枚请高手帮忙指点谢谢!程序代码如下:
#define LED 7 //定义LED引脚为7
#define BUTTON 2 //定义按钮开关引脚2
uint32_t duration=60000;//设定时间1分钟(60000毫秒)
uint32_t time;
uint32_t nowtime;
int val=0; //变量用来储存按钮状态
int old_val=0; //暂存val变量的上一个时间单位
int state=0; //0表示LED关闭,1表示打开
void setup()
{
pinMode(LED,OUTPUT); //设定LED引脚为输出状态
pinMode(BUTTON,INPUT); //设定按钮引脚为输入状态
}
void loop()
{
val=digitalRead(BUTTON); //读取按钮状态并储存
if((val==HIGH)&&(old_val==LOW)) //检查按钮的变化情况
{
state=1-state;
delay(40); //延时简单抗抖动
}
old_val=val; //VAL下载已经是旧的,让我们暂存一下
if(state==1)
{ digitalWrite(LED,HIGH); //开启LED
nowtime=millis();
if(millis()-nowtime>duration)
{
digitalWrite(LED,LOW);
}
}
else
{
digitalWrite(LED,LOW); //关闭LED
}
}
|