
#include <LiquidCrystal.h>      // библиотека экрана

LiquidCrystal lcd( 4, 5, 6, 7,9,10);  // пины экрана

volatile unsigned long time; // время в микросекундах срабатывания датчика нуля
unsigned long tims;           // переменная показаний времени
       
unsigned long currentTime;     //временные переменные для таймера экрана
unsigned long loopTime;

volatile int hz = 0;         // кол-во циклов для средних оборотов.



void setup()
{
  attachInterrupt(0, zero_crosss_int, RISING);  // прерывание по пину 2
   
  lcd.begin(16, 2);          //дисплей 16символов 2строчки
  
 lcd.setCursor(4,0);

lcd.write("HZ:");  //в верхней строке будем выводить требуемые обороты


}
                                               

// the interrupt function must take no parameters and return nothing
void zero_crosss_int()  // function to be fired at the zero crossing to dim the light
{
  time = micros();
  hz=hz+1;    // считаем переход через0
}

void loop()  {

  
    
      // Для вывода значений на дисплей 1 раз в секунду
      
   currentTime = millis();                           // считываем время, прошедшее с момента запуска программы
  if(currentTime >= (loopTime + 1000)){              // сравниваем текущий таймер с переменной loopTime + 1 секунда
 
    
     lcd.setCursor(7,1);
    
lcd.print (hz);      // выводим средние обороты на экран.
lcd.print("       "); 

hz = 0;        // обнуляем количество циклов.
    loopTime = currentTime;                         // в loopTime записываем новое значение
  }
}
