Здравствуйте. Есть проект на ESP32 (aruinoespressive). В Setup создал конфигурацию модуля счётчика. Запустил. Он работает. В проекте требуется изменять counter_h_lim. То увеличивать, то уменьшать. Просмотрел весь pcnt.h-ничего не нашёл.
Как это делается?
void setup()
...
pcnt_config_t pcntConf = { }; // Создаем конфигурацию модуля счетчика
pcntConf.unit = PCNT_UNIT_7; // Выбираем номер модуля
pcntConf.pulse_gpio_num = metr_count;// PIO
pcntConf.pos_mode = PCNT_COUNT_INC; // задаем действие для фронта импульса (есть еще спад импульса - .neg_mode)
// PCNT_COUNT_INC - увеличение счета, PCNT_COUNT_DEC - уменьшение, PCNT_COUNT_DIS - нет счета
pcntConf.counter_h_lim =dlina; // Максимальное значение счетчика (есть еще минимальное .counter_l_lim)
pcnt_unit_config(&pcntConf); // Применяем конфигурацию и запускаем счетчик
pcnt_counter_pause(PCNT_UNIT_7); // Останавливаем счетчик
pcnt_counter_clear(PCNT_UNIT_7); // и сбрасываем в ноль, т.к. еще надо настроить фильтр и прерывание по переполнению
pcnt_set_filter_value(PCNT_UNIT_7, 1023); // Установка фильтра подавления дребезга. Макс-1023.
// Задержка на дребезг: 1 = 12,5 нс (1023 = около 13 мкс)
pcnt_filter_enable(PCNT_UNIT_7); // Запуск фильтра
pcnt_event_enable(PCNT_UNIT_7, PCNT_EVT_H_LIM); // Запускаем событие прерывания по переполнению счетчика
pcnt_isr_service_install(7);
pcnt_isr_handler_add(PCNT_UNIT_7, summator, NULL);
pcnt_counter_resume(PCNT_UNIT_7); // Рестарт счетчика
...
Библиотека pcnt уже встроена. Ничего дополнительного для счётчиков не подключал. Вот часть кода, где возникает ошибка. Крутится непосредственно в loop. Не достаточно?
switch (Encoder.tick())
{
case 5:
Encoder.resetState();
status_on_tft(2); // статус установки метража
tft.setTextColor(TFT_GREEN, TFT_BLACK);
tft.setTextSize(3);
while (Encoder.tick() != 5)
{
if (Encoder.right())
dlina = dlina + Oborotov_v_metre;
if (Encoder.left())
dlina = dlina - Oborotov_v_metre;
if (dlina * multiplikator < 99.5)
{
tft.setTextColor(TFT_BLACK, TFT_BLACK);
tft.drawFloat(0, 0, 36, 95, 1); // затираем
};
tft.setTextColor(TFT_GREEN, TFT_BLACK);
tft.drawFloat(dlina * multiplikator, 0, 0, 95, 1);
}
tft.setTextColor(TFT_ORANGE, TFT_BLACK); // устанавливаем цвет текста и фона
Encoder.resetState();
status_on_tft(0); // статус паузы
//EEPROM.writeUShort(0, 500);//для записи в первый раз. Потом заменить на сл.строку
EEPROM.writeUShort(0, dlina);
EEPROM.commit();
pcntConf.counter_h_lim =dlina;
break;
case 4: //нажать и вправо это 5мм
Encoder.resetState();
EEPROM.writeUChar(4, 5);
EEPROM.commit();
smena_shnura(5);
break;
ну, чтобы наружу не торчал из файла. До этого исправления был локальной переменной и тоже никуда не торчал. Но я обычно глобальные все статиками делаю, если не нужна глобальная видимость. Всем проще - и линкеру и компилятору
@vvb333007, поздравляю! Вы показали чайнику, что можно решить проблему и без выкладывания кода. Не удивляйтесь, когда завтра он будет качать права на эту тему.
А всё начинается с малого. Сначала скетч можно выложить абы как, без тега, затем объяснить абы-как через пень-колоду. Но тут же “умные” люди, все как на подбор, готовы копошиться в этом говне, и предлагать свои условия. Ну просто делать людям нечего, ну и себя ни во что не ценят.(