#include <LiquidCrystal.h>
const int lcd_rs = 12, lcd_en = 11, lcd_d4 = 10, lcd_d5 = 9, lcd_d6 = 8, lcd_d7 = 7;
const int inputPin = A0;
const int numSamples = 10;
const unsigned long updateInterval = 1000;
unsigned long t0, t1, lastUpdate;
float frequencySum;
int sampleCount;
LiquidCrystal lcd(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7);
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
pinMode(inputPin, INPUT);
lastUpdate = micros();
frequencySum = 0;
sampleCount = 0;
}
void loop() {
t1 = micros();
int state = digitalRead(inputPin);
if (state == LOW) {
t0 = t1;
} else {
unsigned long period = t1 - t0;
float frequency = 1000000.0 / (float)period;
frequencySum += frequency;
sampleCount++;
if (sampleCount >= numSamples) {
sampleCount = 0;
frequencySum /= numSamples;
if (t1 - lastUpdate >= updateInterval * 1000) {
lastUpdate = t1;
lcd.setCursor(0, 0);
lcd.print("Frequency:");
lcd.setCursor(0, 1);
lcd.print(frequency);
lcd.print(" Hz");
frequencySum = 0;
}
}
}
}