如何解决计时器内延迟正确的方法是什么
我对与计时器有关的概念感到不满。如何在计时器内操作“延迟”?这是我最好地了解问题的最好方式,这是胡说八道。目的是:我希望测试pinState条件2次(最初一次,然后4秒后),但这一切需要定期进行(因此需要一个计时器)。
该平台是运行WiFi(ESP8266芯片)并在Arduino IDE内完成编码的NodeMCU。
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
BlynkTimer timer;
char auth[] = "x"; //Auth code sent via Email
char ssid[] = "x"; //Wifi name
char pass[] = "x"; //Wifi Password
int flag=0;
void notifyOnFire()
{
int pinState = digitalRead(D1);
if (pinState==0 && flag==0) {
delay(4000);
int pinStateAgain = digitalRead(D1);
if (pinStateAgain==0) {
Serial.println("Alarm has gone off");
Blynk.notify("House Alarm!!!");
flag=1;
}
}
else if (pinState==1)
{
flag=0;
}
}
void setup()
{
Serial.begin(9600);
Blynk.begin(auth,ssid,pass);
pinMode(D1,INPUT_PULLUP);
timer.setInterval(1000L,notifyOnFire);
}
void loop()
{
//Serial.println(WiFi.localIP());
Blynk.run();
timer.run();
}
解决方法
一个简单的解决方法是将计时器的周期设置为4000L timer.setInterval(4000L,notifyOnFire);
,并在notifyOnFire
中使用静态变量并在每次调用notifyOnFire
时切换其值
void notifyOnFire()
{
static char state = 0;
if( state == 0)
{
/* Write here the code you need to be executed before the 4 sec delay */
state = 1;
}
else
{
/* Write here the code you need to be executed after the 4 sec delay */
state = 0;
}
}
关于静态变量的好处是,它们仅在编译时初始化一次,并且在代码范围更改后保留它们的值(在这种情况下,函数notifyOnFire
退出)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。