2014-10-04 68 views
0

我已經問過關於閃爍的LED由按鈕控制的問題關於這個程序,但現在我想問我的程序是否能夠長按持續5秒鐘,然後它將開始閃爍循環,並且如果長按按鈕少於或超過5秒鐘。按鈕長按以控制閃爍的循環

int buttonPin = D0;  
int ledPin = D1; 
int held = 5; 

int ledState = LOW;   
int buttonState;    
int lastButtonState = LOW; 


long lastDebounceTime = 0; 
long debounceDelay = 50; 

void setup() 
{ 
pinMode(buttonPin, INPUT); 

pinMode(ledPin, OUTPUT); 


digitalWrite(ledPin, ledState); 
} 

void loop() 
{ 

int reading = digitalRead(buttonPin); 

if (reading != lastButtonState) 
{ 
    lastDebounceTime = millis(); 
} 

if ((millis() - lastDebounceTime) > debounceDelay) 
{ 

    if (reading != buttonState) 
    { 
     buttonState = reading; 
     if (buttonState == HIGH && held == 5) 
     { 
      BLINK; 
      if { 
      A; 
      } 
      else { 
      B; 
      } 
     } 


    } 
    } 

    digitalWrite(ledPin, ledState); 
    lastButtonState = reading; 
} 

void BLINK(){ 
      int cntr=5; 
      do 
      { 
       digitalWrite(ledPin, HIGH); 
       delay(200); 
       digitalWrite(ledPin, LOW);  
       delay(200);     
       cntr = cntr-1; 
      } 
      while (cntr!=0); 
      digitalWrite(ledPin, HIGH); 
      delay(900000); 
      ledState = LOW; 
    } 
    void A(){ 
    if (held < 5){ 
    digitalWrite(ledPin, LOW); 

    } 
    } 

    void B(){ 
    if (held > 5){ 
    digitalWrite(ledPin, LOW); 
    } 
    } 

回答

1

你爲什麼不嘗試用while循環

if(digitalread(buttonPin) == HIGH){ 
    timerStart = millis(); 
    while(digitalread(buttonPin == HIGH){} 
    timerEnd = millis(); 
} 

然後比較timerStart和timerEnd

阻礙了進程