#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Arduino.h>
#include <esp_timer.h>
const int signalPin = 4;
volatile uint32_t pulseCount = 0;
volatile float frequency = 0.0;
esp_timer_handle_t timer;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void IRAM_ATTR countPulse() {
pulseCount++;
}
void IRAM_ATTR timerCallback(void* arg) {
frequency = pulseCount;
pulseCount = 0;
}
void setup() {
Serial.begin(115200);
pinMode(signalPin, INPUT_PULLUP);
attachInterrupt(signalPin, countPulse, RISING);
esp_timer_create_args_t timerConfig = {
.callback = &timerCallback,
.arg = NULL,
.dispatch_method = ESP_TIMER_TASK,
.name = "Frequency_Timer"
};
esp_timer_create(&timerConfig, &timer);
esp_timer_start_periodic(timer, 1000000);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Frequency:");
}
void loop() {
Serial.print("Frequency: ");
Serial.print(frequency);
Serial.println(" Hz");
lcd.setCursor(0, 1);
lcd.print(frequency);
lcd.print(" Hz ");
delay(1000);
}