2016-09-30 114 views
0

我正在使用一个按钮来触发一个继电器;代码如下。如何编程Arduino忽略按下按钮后按下按钮5分钟?

我想编程我的Arduino忽略任何后续按下按钮5分钟的时间。我如何在我的Arduino草图中包含这个功能?

这样做的目的是禁止用户重复触发继电器,反复按下按钮直至间隔5分钟。这是用于公共艺术作品的,如下所示,需要施加这样的限制以保证作品的适当使用。

int pinButton = 8; 
int Relay = 2; 
int stateRelay = LOW; 
int stateButton; 
int previous = LOW; 
long time = 0; 
long debounce = 500; 
int stayON = 5000; //stay on for 5000 ms 

void setup() { 
    pinMode(pinButton, INPUT); 
    pinMode(Relay, OUTPUT); 
} 

void loop() { 
    stateButton = digitalRead(pinButton); 
    if(stateButton == HIGH && previous == LOW && millis() - time > debounce) { 
    if(stateRelay == HIGH){ 
     digitalWrite(Relay, LOW); 
    } else { 
     digitalWrite(Relay, HIGH); 
     delay(stayON); 
     digitalWrite(Relay, LOW); 
    } 
    time = millis(); 
    } 
    previous == stateButton; 
} 

回答

0

您可以添加一个变量来存储上次显示被激活的时间。然后,您可以将您的else语句更改为elseif语句,在该语句中将当前运行时间与上次激活时间进行比较。这与您使用的去抖方法类似。

long lastActivated = 0; //last time display was activated 
long myDelay = 300000; //5 minutes in millis 


    if(stateButton == HIGH && previous == LOW && millis() - time > debounce) { 
    if(stateRelay == HIGH){ 
     digitalWrite(Relay, LOW); 
    } else if (millis() - lastActivated > myDelay) { //verifies it's been 5 minutes 
     digitalWrite(Relay, HIGH); 
     delay(stayON); 
     digitalWrite(Relay, LOW); 
     lastActivated = millis(); //resets lastActivated when display is allowed to activate 
    } 
    time = millis(); 
    } 
+0

注意,'米利斯()'[后约50天溢出](https://www.arduino.cc/en/Reference/Millis)等按钮按压50天和0和5之间前一分钟后的分钟也将被忽略。尽管Arduinos通常不会连续运行50次,但这不太可能发生。 –