Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 108|回復: 4

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

[複製鏈接]
發表於 2017-10-20 08:14:26 | 顯示全部樓層 |閱讀模式
請問各位大大

想請問有甚麼方式可以取代delay 的指令
我在程式中有寫一個判斷式
當判斷式成立後, 會用delay  指令, delay 5 秒後, 在執行判斷式成立後要做的動作
但是發現, delay 這個指令會拖慢整個程式的運作
也就是這條判斷式不管是否成立. 其他運作的程式反映出來的動作都會變慢
把delay 拿掉後, 整個程式運作就很順
請問有其他方式嗎? 需要delay , 但是又不要影響其他判斷式的運作
謝謝
發表於 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;
    }
  }
}
 樓主| 發表於 2017-10-23 08:17:20 | 顯示全部樓層
超新手 發表於 2017-10-20 08:33
unsigned char State = 0;
unsigned int Prev;
void loop() {

感謝大大幫忙
但是小弟是剛接觸,還是有點看不懂 , 下面是我的程式.想要請問要如何改進去呢
我是要取代最後一個判斷式中的delay
請問要如何修改..
感謝

int pin = 10;  
int ledPin1 = 11;
int ledPin2 = 12;  
int valve = 14;
int photocellPin = 2;  
int photocellPin1 = 3;
int val1 = 0;         
int val2 = 0;         

void setup() {
pinMode(pin, OUTPUT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(valve, OUTPUT);

  }
void loop() {
  val1 = digitalRead(photocellPin);
  if(val1==HIGH){
  digitalWrite(ledPin1, HIGH);
  digitalWrite(ledPin2, LOW);
     }
else{
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, HIGH);
   }
  
   val2 = digitalRead(photocellPin1);
   if(val2==HIGH){
   digitalWrite(pin, HIGH);
            }
else{
   digitalWrite(pin, LOW);
   }

  if(val1== HIGH || val2==LOW){
  delay(5000);
  digitalWrite(valve, HIGH);  
    }
}


發表於 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;
    }
  }
}
 樓主| 發表於 2017-10-25 08:01:37 | 顯示全部樓層
超新手 發表於 2017-10-23 11:40
你這個程式有點奇怪
只要 val1等於 HIGH 或是 val2等於LOW
valve 就會在 5 秒後就為 HIGH

謝謝大大
我的程式是在監控2 個sensor 的作動
因為有時val1 等於LOW , val2 等於HIGH
這時我就不讓valve 去做動
我再把程式修改一下再測試看看
感謝大大的幫忙
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2017-11-23 20:57 , Processed in 0.124342 second(s), 16 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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