У меня есть простое приложение для подсчета потока воды с помощью датчика, который оснащен герконом.Таким образом, приложение должно рассчитывать только количество раз, которое выключатель закрывается.
Мой первый код был:
const int sensorPin = 2;
volatile int counter = 0;
void setup() {
Serial.begin(115200);
pinMode(sensorPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(sensorPin), sensorISR, FALLING);
}
void loop() {
Serial.print("Counter: ");
Serial.println(counter);
}
void sensorISR() {
counter++;
}
И как только бутылка объемом 20 литров была заполнена, счетчик показывал что-то вроде 120.
Затем я изменил код следующим образом:
const int sensorPin = 2;
volatile int counter = 0;
void setup() {
Serial.begin(115200);
pinMode(sensorPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(sensorPin), sensorISR, FALLING);
}
void loop() { }
void sensorISR() {
counter++;
Serial.print("Counter: ");
Serial.println(counter);
}
И счетчик опустился до 40 (при использовании той же бутылки на 20 литров).
Счет должен быть 20Lно это не моя проблема, так как это происходит из-за отскока герконов (я остановлюсь на этом последнем).Поскольку в проекте будет 3 датчика и 3 функции ISR, мне интересно, почему включение команды Serial.print () в основной цикл может привести к таким странным результатам.
Спасибо, Пауло