Шо ты мелешь мельник! :)))))))) Я ничего не имею, но когда ты начинаешь вычисления делай detachInterrupt. Потому что пока ты все посчитаешь и выплюнешь в сомпорт, counter уже может быть не равным нулю. Ну а по хорошему, тебе не нужно считать импульсы, нужно знать период их следования. То есть время между двумя импульсами и по нему вычислять проток. const int interruptPin = 2; // Пин, к которому подключен счетчик импульсов (INT0 на Arduino Nano) volatile unsigned long previousMillis = 0; // Время последнего импульса volatile unsigned long interval = 0; // Интервал времени между импульсами в миллисекундах volatile float flowRate = 0.0; // Проток в литрах в час void setup() { Serial.begin(9600); attachInterrupt(digitalPinToInterrupt(interruptPin), countPulse, FALLING); // Прерывание при падении сигнала } void loop() { unsigned long currentMillis = millis(); if (interval > 0 && currentMillis - previousMillis >= interval) { detachInterrupt(digitalPinToInterrupt(interruptPin)); // Отключаем прерывание для измерения flowRate = (1000.0 / interval) * 40.0; // Вычисляем проток в литрах в час Serial.print("Проток в час: "); Serial.print(flowRate); Serial.println(" л/ч"); previousMillis = currentMillis; // Обновляем время последнего импульса attachInterrupt(digitalPinToInterrupt(interruptPin), countPulse, FALLING); // Подключаем прерывание заново } } void countPulse() { // Эта функция вызывается при каждом импульсе // Мы обновляем время последнего импульса и вычисляем интервал unsigned long currentMillis = millis(); interval = currentMillis - previousMillis; previousMillis = currentMillis; }
@@Smarodina93 А почему ты решил что я могу угадать сколько импульсов на литр в твоем китайском счетчике? Я тебе просто пример привел в котором 40 импульсов. А сколько в твоем - я бп.
Шо ты мелешь мельник! :)))))))) Я ничего не имею, но когда ты начинаешь вычисления делай detachInterrupt. Потому что пока ты все посчитаешь и выплюнешь в сомпорт, counter уже может быть не равным нулю. Ну а по хорошему, тебе не нужно считать импульсы, нужно знать период их следования. То есть время между двумя импульсами и по нему вычислять проток.
const int interruptPin = 2; // Пин, к которому подключен счетчик импульсов (INT0 на Arduino Nano)
volatile unsigned long previousMillis = 0; // Время последнего импульса
volatile unsigned long interval = 0; // Интервал времени между импульсами в миллисекундах
volatile float flowRate = 0.0; // Проток в литрах в час
void setup() {
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(interruptPin), countPulse, FALLING); // Прерывание при падении сигнала
}
void loop() {
unsigned long currentMillis = millis();
if (interval > 0 && currentMillis - previousMillis >= interval) {
detachInterrupt(digitalPinToInterrupt(interruptPin)); // Отключаем прерывание для измерения
flowRate = (1000.0 / interval) * 40.0; // Вычисляем проток в литрах в час
Serial.print("Проток в час: ");
Serial.print(flowRate);
Serial.println(" л/ч");
previousMillis = currentMillis; // Обновляем время последнего импульса
attachInterrupt(digitalPinToInterrupt(interruptPin), countPulse, FALLING); // Подключаем прерывание заново
}
}
void countPulse() {
// Эта функция вызывается при каждом импульсе
// Мы обновляем время последнего импульса и вычисляем интервал
unsigned long currentMillis = millis();
interval = currentMillis - previousMillis;
previousMillis = currentMillis;
}
А где у тебя 64.8 импульса на литр?
@@Smarodina93 А почему ты решил что я могу угадать сколько импульсов на литр в твоем китайском счетчике? Я тебе просто пример привел в котором 40 импульсов. А сколько в твоем - я бп.
услышал, я не смог догадаться что 40 это как раз коэфициент