Наброски топорного нехорошего варианта, про точность и работоспособность промолчу
(они сильно зависят от частоты измерений и продолжительности измерения, так же считаем, что на вход не летят какие-то помехи):
int time_stop; //время прекращения измерений
int time;//для текущего времени
int count;//счетчик
int t1,t2;//для определения того, что прошел импульс
//t1 - текущее, t2 - предыдущее состояния
count=0;//обнуляем всё
t1=0; t2=0;
time=millis();//считываем текущее время
time_stop=time+100; //через сколько прекратить замер в данном случае +100мс
while(time<=time_stop)//пока время меньше времени останова
{
t1=digitalRead(PINx);//читаем какой-то пин
if(t1!=t2)//если t1 и t2 не равны
{
if(t1>t2)count++;//если t1>t2 (т.е. передний фронт), то увеличим счетчик
t2=t1; //предыдущее состояние = текущему
}
time=millis();//обновляем текущее время
}
В
count под конец должны получить что-то очень близкое к количеству импульсов.
Из минусов - цикл жрет время, не давая в этот момент делать что-либо еще.
Если только посчитать, потом вывести на дисплей, то пойдет может быть.