ESP8266 attachinterrupt + millis忽略条件

时间:2017-04-26 20:48:28

标签: c++ nodemcu arduino-esp8266

我正在为风速计编写一个驱动程序,它基于霍尔效应,我正在尝试使用硬件中断来监控传感器的每次旋转。

通过这样做,我发现了一个我无法解决的问题,并由以下代码表示:

#if ARDUINO >= 100
 #include "Arduino.h"
#else
 #include "WProgram.h"
#endif

const int interruptPin = D5;
volatile uint16_t lastDebounceTime = 0;
volatile int numberOfInterrupts = 0;
uint16_t previousUpdate = 0;
const uint16_t updateInterval = 5000;
void handleInterrupt();
void countInterrupts();

void setup() {
  Serial.begin(115200);
  pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin), handleInterrupt, FALLING);
}

void loop() {
  if ((millis() - previousUpdate) > updateInterval) {
    Serial.println(".................");
    uint16_t currentMillis = millis();
    Serial.println(currentMillis);
    Serial.println(previousUpdate);
    Serial.println(currentMillis - previousUpdate);
    if (currentMillis - previousUpdate < updateInterval) Serial.println("This line shoudn't be executed, but it actually is!!");
    Serial.println(".................");
    previousUpdate = millis();
  }
}

void handleInterrupt() {
  numberOfInterrupts++;
}

首先,代码按预期运行,但过了一段时间,它只是停止检查条件if ((millis() - previousUpdate) > updateInterval)if (currentMillis - previousUpdate < updateInterval) Serial.println("This line shoudn't be executed, but it actually is!!");,然后在每次迭代时ESP8266将数据发送到串行接口。 millis()正在运行,中断功能正在运行。

我真的想要理解并解决这个问题,如果有人能帮我解决这个问题会很棒!

谢谢!

0 个答案:

没有答案