我正在为风速计编写一个驱动程序,它基于霍尔效应,我正在尝试使用硬件中断来监控传感器的每次旋转。
通过这样做,我发现了一个我无法解决的问题,并由以下代码表示:
#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()
正在运行,中断功能正在运行。
我真的想要理解并解决这个问题,如果有人能帮我解决这个问题会很棒!
谢谢!