byte n = 1; // створюємо змінну типу byte із кількістю лопатей вентилятора
double RPM_time; //дробна змінна із береженням обертів за певний час
volatile unsigned long flash, lastflash, lastshow; // створюємо змінні , які будуть зберігати втільки позитивні значення типу даних long
unsigned int RPM; // створюємо цілочисельну змінну для зберігання у собі кількості обертів за хвилину
void setup() {
Serial.begin(9600); // початок роботи із серійним портом
attachInterrupt(0, sensor, RISING ); // підключаємо функцію переривань на піні D2, із моніторингом зпрацювання на сигналі підйому (+5В)
}
void sensor () {
flash = micros() - lastflash; //обчислюємо час між двома спрацюваннами датчика
lastflash = micros(); //запамятовуємо час останнього спрацювання датчика(останнього оберта)
}
void loop() {
if (micros()-lastflash > 5000000) { // умова, якщо із датчика впродовж 5 секунд не приходить сигнал, то вважаємо,що вентилятор не обертається
RPM=0;
}
else {
RPM_time = flash/1000000 * n; // підраховуємо час одного оберту у секундах з урахуванням кількості лопатей вентилятора
RPM = 60/RPM_time;
}
if (millis()- lastflash > 300) { // кожні 300 млсек виводимо у консоль змінну RPM
Serial.print(RPM);
Serial.println(" об/хв");
lastshow = millis(); // скидання таймеру
}
}