Плата: esp-wroom-32 38 pin Подключал дисплей к VSPI: MOSI - 23 CLK - 18 CS - 5 DC - 17 RST - 16 Все работало, не один из этих контактов не ADC. После чего у меня возникла потребность установить энкодер. Энкодер с ADC пинами работал плохо, поэтому я его решил перебросить на 5, 17 и 16 контакт. Сейчас энкодер работает идеально, а дисплей на контактах 4, 0 и 2 не работает. Перед прошивкой, шлейф с дисплея снимаю. Нашел такую процедуру: gpio_pad_select_gpio(); Не помогла. Может кто-то знает как правильно перевести ADC в цифровые выходы?
А че стандартные Ардуиновские - pinMode(pin, OUTPUT); pinMode(pin, INPUT); pinMode(pin, INPUT_PULLUP); не работают на ESP ? В работе важнее изображение на экране. Так что верните дисплей туда где он нормально работал. И воюйте с энкодером - это будет намного проще. Вам надо перевести три пина в режим цифрового входа с подтяжкой. И всех делов. Сами опрашиваете энкодер или библиотеку используете ?
Написал свою библиотеку и пользуюсь ей. Собирал библиотеку по примерам других библиотек. https://github.com/WhiteFoxDeveloper/ESP-IDF-LIBS/tree/main/Encoder Сейчас она выглядит чуть иначе, но указанная версия ни чуть не хуже. Пишу код в визуалке по фреймворку esp idf, ардуиновские процедуры не бачу. ADC пины можно инициализировать как обыкновенные цифровые, но они введут себя как-то не так... Подозреваю, что дело в неправильной инициализации. Инициализация: Код (C++): gpio_pad_select_gpio(gpio); gpio_config_t io_conf = { .intr_type = GPIO_INTR_ANYEDGE, //Прерывание в обе стороны .pin_bit_mask = 1ULL << gpio), .mode = GPIO_MODE_INPUT, .pull_down_en = 0, //без земли .pull_up_en = 1}; //с подтяжкой gpio_config(&io_conf); gpio_install_isr_service(0); gpio_isr_handler_add(gpio, interrupt, args);
Нашел в чем дело, благодаря недавно пришедшей плате. Почему-то 0 контакт никак не хочет работать, при этом на распиновке он не указан как HS. Использовал вместо 4, 0 и 2 пина, 4, 2 и 15.