我在这里有这个代码,当按下按钮时,LED将闪烁3-10秒,然后保持15分钟。现在,我想要做的是,我如何调用tinyGPS.h来准确地在3-10秒的闪烁时间之后执行?我已经创建了一个函数,但我没有运气。
#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;
}发布于 2014-10-13 03:31:16
抱歉,但是..。你在标题中提到的中断在哪里?
不管怎样..。如果你想在开始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部分;您可以根据需要延长或缩短时间...
https://stackoverflow.com/questions/26325697
复制相似问题