Просьба подсказать пример использования аппаратного счетчика pcnt для esp32 в arduino для счета. В интернете есть примеры но они работали на старой версии 2.0.
Пример ниже компилируется без ошибок но не считает. Всю голову сломал.
#include <Arduino.h>
#include "driver/pulse_cnt.h"
pcnt_unit_handle_t pcnt_unit;
void setup() {
Serial.begin(115200);
//Создаём PCNT unit счетчик
pcnt_unit_config_t unit_config = {0};
unit_config.high_limit = 30000; // Максимальное значение счетчика
unit_config.low_limit = -1; // Минимальное значение счетчика
pcnt_unit = NULL;
pcnt_new_unit(&unit_config, &pcnt_unit);
//Создаём PCNT channel счетчик
pcnt_chan_config_t channel_config = {0};
channel_config.edge_gpio_num = 16; // GPIO, к которому подключён датчик
channel_config.level_gpio_num = -1; // Не используется
pcnt_channel_handle_t pcnt_channel = NULL;
pcnt_new_channel(pcnt_unit, &channel_config, &pcnt_channel);
//Включаем фильтр debounce счетчик
pcnt_glitch_filter_config_t filter_config = {0};
filter_config.max_glitch_ns = 1000;
pcnt_unit_set_glitch_filter(pcnt_unit, &filter_config);
//Включаем unit и запускаем счёт счетчик
pcnt_unit_enable(pcnt_unit);
pcnt_unit_start(pcnt_unit);
}
void loop() {
delay(1000);
int count = 0;
pcnt_unit_get_count(pcnt_unit, &count); // Считываем значение счетчика
// pcnt_unit_clear_count(pcnt_unit); // Сбросить счётчик для следующего измерения
Serial.println(String(count));
}
Заработало Спасибо! 2 выходных убил на решение по счетчику.
Serial.println(String(count)) ну это у меня осталось от uint32_t Pr=0; lcd.print(String(Pr)); дисплей не понимает такое количество знаков цифры. наспех урезал код для форума.
Компилятор жаловался Порядок указания поля ‘pcnt_unit_config_t::low_limit’ не соответствует порядку объявления в ‘pcnt_unit_config_t’