2014-10-04 5 views
0

Я уже спросил об этой программе в одном вопросе о мигающем светодиоде, который будет управляться кнопкой, но теперь я хочу спросить, может ли моя программа иметь длительное нажатие в течение 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

Почему бы вам не попробовать проведение процесса с циклом в то время как

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

Затем сравните timerStart и timerEnd