欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 求教!關于arduino 時間控制問題 [打印本頁]

作者: qqboy1978    時間: 2018-6-13 10:40
標題: 求教!關于arduino 時間控制問題
求教:用人體熱釋制作感應燈實驗(程序為網上下載用于學習,自己添加了時間控制函數),
為何設定了無動作時的等待時間如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
  }

}



作者: zhanghyg    時間: 2018-6-13 15:13

你這句目的是先做減法在比較,但是比較的優先級大于減號的優先級,所以芯片會先做比較再做減法,要想達到目的加個括號就可以了。
作者: Jock123    時間: 2018-6-13 17:01
原來如此

作者: qqboy1978    時間: 2018-6-13 17:07
已經加了掛號,還是無法自動熄滅,再次求教!謝謝!
nowtime=millis();

      if((millis()-nowtime)>duration)
      {

        digitalWrite(LED,LOW);
      }
作者: qqboy1978    時間: 2018-6-13 17:12
zhanghyg 發表于 2018-6-13 15:13
你這句目的是先做減法在比較,但是比較的優先級大于減號的優先級,所以芯片會先做比較再做減法,要想達到 ...

連接圖

作者: qqboy1978    時間: 2018-6-13 17:14
zhanghyg 發表于 2018-6-13 15:13
你這句目的是先做減法在比較,但是比較的優先級大于減號的優先級,所以芯片會先做比較再做減法,要想達到 ...

接線圖如下

作者: zhanghyg    時間: 2018-6-14 08:47

這句應該放到最上面賦值,只能執行一次,不然你每次循環到這里都會重新賦值,一樣的數值相減永遠等于零。
作者: qqboy1978    時間: 2018-6-14 19:46
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
  }

}






歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1