Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 5880|回復: 16
打印 上一主題 下一主題

詢問有甚麼方式可以取代delay 的指令

[複製鏈接]
1#
發表於 2017-10-20 08:33:35 | 顯示全部樓層
unsigned char State = 0;
unsigned int Prev;
void loop() {
  if(State == 0) {
     if(判斷式1) {
        State = 1;
        Prev = millis();
     }   
  } else {
    unsigned int Time = millis() - Prev;
    if(Time >= 5000) {
      if(判斷式2) {        
      }
      State = 0;
    }
  }
}
2#
發表於 2017-10-23 11:40:23 | 顯示全部樓層
你這個程式有點奇怪
只要 val1等於 HIGH 或是 val2等於LOW
valve 就會在 5 秒後就為 HIGH
永遠不會變 LOW

unsigned char State = 0;
unsigned int Prev;
void loop() {
..................
  if (State == 0) {
    if (val1 == HIGH || val2 == LOW) {
      State = 1;
      Prev = millis();
    }
  } else {
    unsigned int Time = millis() - Prev;
    if (Time >= 5000) {
      digitalWrite(valve, HIGH);
      State = 0;
    }
  }
}
3#
發表於 2017-12-25 17:13:42 | 顯示全部樓層
另外定義一個 int Prev2;
unsigned char State = 0;
unsigned int Prev;
unsigned int Prev2;
void setup() {
...........................
Prev =  millis();
Prev2 =  millis();
}
void loop() {
//第一組
  if (State == 0) {
    if (val1 == HIGH || val2 == LOW) {
      State = 1;
      Prev = millis();
    }
  } else {
    unsigned int Time = millis() - Prev;
    if (Time >= 5000) {
      digitalWrite(valve, HIGH);
      State = 0;
    }
  }
//第二組
  if (判斷式) {
      Prev2 = millis();
  } else {
    unsigned int Time2 = millis() - Prev2;
    if (Time2 >= 5000) {
      
    }
  }
}
4#
發表於 2017-12-26 05:20:58 | 顯示全部樓層
本帖最後由 超新手 於 2017-12-26 05:24 編輯

程式本來就是前半段加 delay
if (State == 0) {
    if (val1 == LOW &&val2 == HIGH) {
      State = 1;
      Prev = millis();
    } else {
       digitalWrite(valve, LOW);
   }
  } else {
    unsigned int Time = millis() - Prev;
    if (Time >= 5000) {
      digitalWrite(valve, HIGH);
      State = 0;
    }
  }
5#
發表於 2017-12-26 15:42:04 | 顯示全部樓層
本帖最後由 超新手 於 2017-12-26 15:54 編輯

你括號括錯了
中間少了一個, 應該跑到最下面去了
if (State == 0) {
    if (val1 == HIGH || val2 == LOW) {
      State = 1;
      Prev = millis();
    }
  }
  else {
    unsigned int Time = millis() - Prev;
    if (Time >= 5000) {
      digitalWrite(valve, HIGH);
      State = 0;
    }
  } //少了這個右括號, 少了這個右括號, 少了這個右括號

if (State2 == 0) {
    if((val1==LOW) && (val2==HIGH)){
      State2 = 1;
      Prev2 = millis();
    } else {
       digitalWrite(botpin, HIGH);
   }
  } else {
    unsigned int Time2 = millis() - Prev2;
    if (Time2 >= 5000) {
      digitalWrite(botpin, LOW);
      State2 = 0;
    }
  }
// 所以你應該在這邊會多一個右括號, 記得去掉


6#
發表於 2017-12-26 15:55:28 | 顯示全部樓層
本帖最後由 超新手 於 2017-12-26 16:06 編輯

己經回答在 11 樓
你括號括錯地方
7#
發表於 2017-12-26 16:41:58 | 顯示全部樓層
你 high low 寫反了
if (State2 == 0) {
    if((val1==LOW) && (val2==HIGH)){
      State2 = 1;
      Prev2 = millis();
    }
    else  {
      digitalWrite(botpin, LOW);
   }
  } else {
    unsigned int Time2 = millis() - Prev2;
    if (Time2 >= 5000) {
      digitalWrite(botpin, HIGH);
      State2 = 0;
    }
  }
   

if (State == 0) {
    if (val1 == HIGH || val2 == LOW) {
      State = 1;
      Prev = millis();
    }
  }
  else {
    unsigned int Time = millis() - Prev;
    if (Time >= 5000) {
      digitalWrite(valve, HIGH);
      State = 0;
    }
  }
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-5-14 21:44 , Processed in 0.222880 second(s), 6 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表