ESP8266 attachinterrupt + миллис игнорирующее условное

Я пишу драйвер для анемометра, который основан на эффекте Холла, и я пытаюсь использовать аппаратные прерывания для контроля каждого вращения датчика.

При этом я обнаружил проблему, которую не могу решить, и выражается следующим кодом:

#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

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]