// Подключаем необходимые библиотеки #include #define SENSOR_PIN 26 // Подключаем датчик к D2 volatile int pulseCount = 0; // Количество импульсов float flowRate; // Расход воды в L/min unsigned long previousMillis = 0; // Для контроля времени float totalFlow = 0; // Функция, вызываемая при каждом импульсе void pulseCounter() { pulseCount++; } void setup() { Serial.begin(9600); // Включаем Serial Monitor pinMode(SENSOR_PIN, INPUT_PULLUP); // Настраиваем вход с подтяжкой к HIGH attachInterrupt(digitalPinToInterrupt(SENSOR_PIN), pulseCounter, FALLING); // Прерывание по спаду } void loop() { // Проверяем, прошла ли 1 секунда if (millis() - previousMillis >= 1000) { detachInterrupt(digitalPinToInterrupt(SENSOR_PIN)); // Отключаем прерывание на время расчетов // Формула: частота импульсов / 7.5 = расход в L/min flowRate = (pulseCount / 7.5); pulseCount = 0; // Сбрасываем счетчик previousMillis = millis(); // Обновляем таймер totalFlow += flowRate / 50; Serial.print("Flow Rate: "); Serial.print(flowRate); Serial.println(" L/min"); Serial.print("total Flow: "); Serial.print(totalFlow); Serial.println(" L"); attachInterrupt(digitalPinToInterrupt(SENSOR_PIN), pulseCounter, FALLING); // Включаем прерывание } }