Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 在中断内调用库_Function_Arduino_Interrupt - Fatal编程技术网

Function 在中断内调用库

Function 在中断内调用库,function,arduino,interrupt,Function,Arduino,Interrupt,我这里有一个代码,当按下按钮时,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 lastButtonSta

我这里有一个代码,当按下按钮时,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;
  }

对不起,但是。。。你在标题中提到的中断在哪里

无论如何。。。如果要在开始15分钟等待前执行一次函数,可以将其放在指令
延迟(900000)之前

但是,如果您想在这15分钟内完成某项工作,则不能使用
延迟
功能,因为它是一个阻塞功能。你必须

  • 等待较短的时间,然后执行某事或
  • 使用
    millis()
    功能,如“无延迟闪烁”示例所示
  • 我建议你使用第二种解决方案,因为你有一个更精确的等待时间,这是正确的方法

    或者,更好的是,最好的解决方案不是使用像您这样的代码,而是实现一个有限状态机,将经过的时间作为参数来更改状态

    如果你只是期望所有的东西都在盘子里,我可以给你写解决方案1:而不是
    delay(900000)写入

    int time_cnt;
    for(time_cnt=0; time_cnt<900; time_cnt++)
    {
        // Do something
        delay(1000);
    }
    
    int time\u cnt;
    
    对于(time_cnt=0;time_cnt我如何将按钮设置为保持,就像我希望按钮被按下5秒一样?它是这样的,LED闪烁5秒的时间与保持按钮的时间相同。抱歉,我不太理解。无论如何,对于您的问题,我建议使用状态机模板。然后使用毫秒触发状态转换s