zhanghyg 发表于 2018-6-13 15:13 改了,把nowtime=millis(); 放置在void setup(){}内仍然不行。见笑了因为是纯小白一个,还是要谢谢高手的指点!!以下是最新的程序代码: //人体热释模块实验,当人经过时灯亮,再经过时灯灭。 //在灯亮情况下没有人移动时根据设定好的时间灯自动熄灭。(本程序定义30秒钟) #define LED 7 //定义LED引脚为7 #define BUTTON 2 //定义按钮开关引脚2 const long duration=30000;//设定时间30秒 unsigned long millis(); unsigned long nowtime=0; 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 if((millis()-nowtime)>duration&&(LED==HIGH)) { nowtime=millis(); digitalWrite(LED,LOW); } } else { digitalWrite(LED,LOW); //关闭LED } } |
![]() 这句应该放到最上面赋值,只能执行一次,不然你每次循环到这里都会重新赋值,一样的数值相减永远等于零。 |
已经加了挂号,还是无法自动熄灭,再次求教!谢谢! nowtime=millis(); if((millis()-nowtime)>duration) { digitalWrite(LED,LOW); } |
原來如此 |