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