#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "esp_log.h"
#include "driver/adc.h"
// Definições de pinos
#define INPUT_PIN 34 // Pino de entrada (GPIO34)
#define SAMPLE_PERIOD_MS 1000 // Período de amostragem em milissegundos (1 segundo)
static const char *TAG = "Frequency Test";
// Variáveis globais
volatile uint32_t pulse_count = 0; // Contador de pulsos
uint32_t last_state = 0; // Último estado do pino
// Função para medir a frequência
void measure_frequency(void *arg) {
while (1) {
uint32_t current_state = gpio_get_level(INPUT_PIN); // Lê o estado atual do pino
// Verifica se houve uma transição de borda (subida ou descida)
if (current_state != last_state) {
pulse_count++; // Incrementa o contador de pulsos
last_state = current_state; // Atualiza o estado anterior
}
// A cada 1 segundo, imprime a frequência
vTaskDelay(pdMS_TO_TICKS(SAMPLE_PERIOD_MS)); // Espera 1 segundo
// Imprime a quantidade de pulsos recebidos em 1 segundo
uint32_t count = pulse_count;
pulse_count = 0; // Reseta o contador de pulsos
// Calcula e imprime a frequência
ESP_LOGI(TAG, "Frequência medida: %d Hz", count);
}
}
// Função principal
void app_main() {
ESP_LOGI(TAG, "Iniciando avaliação da frequência máxima de entrada...");
// Configuração do pino de entrada (GPIO34)
gpio_config_t io_conf = {
.pin_bit_mask = (1ULL << INPUT_PIN),
.mode = GPIO_MODE_INPUT,
.pull_up_en = GPIO_PULLUP_DISABLE,
.pull_down_en = GPIO_PULLDOWN_DISABLE,
.intr_type = GPIO_INTR_DISABLE // Desabilita interrupções
};
gpio_config(&io_conf);
// Criação da tarefa para medir a frequência
xTaskCreate(measure_frequency, "Measure Frequency", 2048, NULL, 5, NULL);
// O código vai continuar executando e medindo a frequência a cada segundo
while (1) {
vTaskDelay(pdMS_TO_TICKS(1000)); // Delay de 1 segundo
}
}