![]() |
發(fā)布時間: 2018-6-13 10:40
正文摘要:求教:用人體熱釋制作感應(yīng)燈實驗(程序為網(wǎng)上下載用于學習,自己添加了時間控制函數(shù)), 為何設(shè)定了無動作時的等待時間如1分鐘后燈無法自動熄滅,小白一枚請高手幫忙指點謝謝!程序代碼如下: #define LED 7&n ... |
zhanghyg 發(fā)表于 2018-6-13 15:13 改了,把nowtime=millis(); 放置在void setup(){}內(nèi)仍然不行。見笑了因為是純小白一個,還是要謝謝高手的指點!!以下是最新的程序代碼: //人體熱釋模塊實驗,當人經(jīng)過時燈亮,再經(jīng)過時燈滅。 //在燈亮情況下沒有人移動時根據(jù)設(shè)定好的時間燈自動熄滅。(本程序定義30秒鐘) #define LED 7 //定義LED引腳為7 #define BUTTON 2 //定義按鈕開關(guān)引腳2 const long duration=30000;//設(shè)定時間30秒 unsigned long millis(); unsigned long nowtime=0; int val=0; //變量用來儲存按鈕狀態(tài) int old_val=0; //暫存val變量的上一個時間單位 int state=0; //0表示LED關(guān)閉,1表示打開 void setup() { pinMode(LED,OUTPUT); //設(shè)定LED引腳為輸出狀態(tài) pinMode(BUTTON,INPUT); //設(shè)定按鈕引腳為輸入狀態(tài) } void loop() { val=digitalRead(BUTTON); //讀取按鈕狀態(tài)并儲存 if((val==HIGH)&&(old_val==LOW)) //檢查按鈕的變化情況 { state=1-state; delay(40); //延時簡單抗抖動 } old_val=val; //VAL下載已經(jīng)是舊的,讓我們暫存一下 if(state==1) { digitalWrite(LED,HIGH); //開啟LED if((millis()-nowtime)>duration&&(LED==HIGH)) { nowtime=millis(); digitalWrite(LED,LOW); } } else { digitalWrite(LED,LOW); //關(guān)閉LED } } |
![]() 這句應(yīng)該放到最上面賦值,只能執(zhí)行一次,不然你每次循環(huán)到這里都會重新賦值,一樣的數(shù)值相減永遠等于零。 |
已經(jīng)加了掛號,還是無法自動熄滅,再次求教!謝謝! nowtime=millis(); if((millis()-nowtime)>duration) { digitalWrite(LED,LOW); } |
原來如此 |
![]() 你這句目的是先做減法在比較,但是比較的優(yōu)先級大于減號的優(yōu)先級,所以芯片會先做比較再做減法,要想達到目的加個括號就可以了。 |
參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
---|---|---|
![]() | + 20 | 回帖助人的獎勵! |
Powered by 單片機教程網(wǎng)