(підключати треба до порту який вміє працюввати з перериваннями: 2,3 для UNO )
Код: Виділити все
int encoder_pin = 2; // импульсні сигналі від модуля до цифрового порту 2
unsigned int rpm; // кількість обертів за хвилину
volatile byte pulses; // кількість імпульсів
unsigned long timeold;
// кількість імпульсів на оберт
// в залежності від можедлі диска (12 дирочок в диску нижче))
unsigned int pulsesperturn = 12;
void counter()
{
//оновление рахунку імпульсів
pulses++;
}
void setup()
{
Serial.begin(9600);
pinMode(encoder_pin, INPUT);
//Переривання 0 на цифровій линіі 2
//зпрацювання тригера по спаду сигналу
attachInterrupt(0, counter, FALLING);
// ініціалізация
pulses = 0;
rpm = 0;
timeold = 0;
}
void loop()
{
if (millis() - timeold >= 1000) {
//Не обробляти переривання під час рахунку
detachInterrupt(0);
rpm = (60 * 1000 / pulsesperturn )/ (millis() - timeold)* pulses;
timeold = millis();
pulses = 0;
Serial.print("RPM = ");
Serial.println(rpm,DEC);
//Перезагрузка процесу обробки переривань
attachInterrupt(0, counter, FALLING);
}
}