我这里有这个代码,当按下按钮时,LED将闪烁3-10秒,然后保持15分钟。现在,我想要做的是,如何在闪烁时间的3-10秒之后调用tinyGPS.h?我创造了一个功能,但我没有运气。
#include "TinyGPS/TinyGPS.h"
int buttonPin = 0;
int ledPin = 1;
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)
{
int cntr=10;
do
{
digitalWrite(ledPin, HIGH);
delay(200);
digitalWrite(ledPin, LOW);
delay(200);
cntr = cntr-1;
}
while (cntr!=0);
digitalWrite(ledPin, HIGH);
delay(900000);
ledState = LOW;
}
}
}
digitalWrite(ledPin, ledState);
lastButtonState = reading;
}
答案 0 :(得分:0)
很抱歉,但是......你在标题中谈到的中断在哪里?
无论如何......如果你想在开始15分钟等待之前执行一个函数,你可以把它放在指令delay(900000);
之前。
但是,如果您想在这15分钟内执行某些操作,则无法使用delay
功能,因为它是阻止功能。你必须
millis()
功能,如"无延迟闪烁"示例我建议您使用第二种解决方案,因为您有更精确的等待时间,而且,这是正确的方法。
或者,更好的是,最好的解决方案是没有像你这样的代码,而是实现一个有限状态机,将经过的时间作为改变状态的参数。
如果你只是期待一切,我可以给你解决方案1:而不是delay(900000);
写
int time_cnt;
for(time_cnt=0; time_cnt<900; time_cnt++)
{
// Do something
delay(1000);
}
每秒执行一次Do something
部分;你可以根据自己的需要延长时间或缩短时间......