Наткнулся на то что запуске с ESP32 (конкретно использовалась плата ESP32 DEVKIT V1 ) библиотечка EncButton2 отрабатывает криво (в варианте с EncButton - аналогично). Короткие нажатия на кнопку она вообще не видит. Если делать более длительные нажатия (что-то вроде секунды), то клики, хоть и криво, начинают выводятся. Закомментированный кусок кода в конце скетча - вообще не отрабатывает…
С платой Аrduino Nano V3 все работает нормально.
Arduino IDE 2.0.4
EncButton 2.0.0
Пробовал использовать другую библиотечку - OneButton. С ней все примерно аналогично.
Как все же это дело можно заставить правильно работать с ESP32?
Ну, я уже несколько лет не брал в руки шашечки… Согласен, так делать неверно - на момент написания ошибку осознал, просто не подкорректировал свой пример. Но, в конкретном случае, к ошибке подобная запись не приводит.
Вашу библиотечку попробовал. Работает лучше прочих. Но… Глотает нажатия. Причем больше одиночные. Вот, смотрите на видео. То что кнопка срабатывают видно по отсвету красного светодиодика (в данном случае используются сенсорные, что планирутся переделать).
Меня вот что смущает - и те что я использовал ведь должны нормально работать - в интернете есть примеры с ними и ESP32. Про какую-то несовместимость нигде не упоминается. Используемый тип ESP-шки тоже самый обычный.
На какую-то неисправность ESP-шки я не грешу - других проблем с ней не было замечено…
Сейчас проверить не могу, в процессе переезда, все свое барахло уже отвез, а сам еще тут )) Но такого быть действительно не должно. Для сенсорных кнопок можно еще интервал антидребезга установить нулевой
Кнопки на данный момент сенсорные - их подтягивать не надо. Да и все библиотечки по умолчанию включают подтяжку. Так что резисторов в схеме вообще нет. Есть лишь 1 кондер параллельно кнопке сброса, чтобы у данного модуля ESP32 работал автосброс при загрузке скетча…
Есть принципиальные отличия у этой драной ESP32 по приоритету тасков, например. Дефолтовый таск в IDLE priority. И его может прижать к полу любой другой процесс.
Сейчас только чуть не нажрался - моргалка в одиночку нормально работает, а как побольше задач назапускаешь - все, крендец. Встать может просто посреди цикла (к примеру). Без всяких пояснений. А потом продолжить через случайный интервал.
Появляется понимание, что многозадачность - круто, но имеет “подводные камни”? Начинаем изучать приоритеты, семафоры, очереди и прочие мьютексы!
Нормальный контроллер, а ЕСП32 из них почти самый маленький, это уже не счет тактов и не ногодрыг, а вот-это-вот-всё. Точно как на писюке.
Любители Асма и ногодрыга - остаются на АВР. Кстати многие его именно за это и любят. Я без сарказма.
По сути: используй таскКриейтПиннедТоКор. И все задачи, которые хочешь видеть предсказуемыми вешай не на то ядро. на котором ВиФи. И разбери их по приоритетам.
А вместе с ВиФи вешай всякий сервис, который может быть прерван без вреда. Например вообще всё сетевое. И сервер и МКТТ и телеграм клиент и что-там еще есть у тебя. Тогда ядро без ВиФи ты увидишь более предсказуемым.
Сорри. а то многие меня алкашом считают! путаница запятых. точек, больших и маленьких букв связана с тем, что на кухне у меня клава залита всем, чем можно и нельзя и правый шифт почти не работает. Поэтому часто точка вместо запятой выходит.
Еще раз - Сорри!
Да я уже и с тасками и с очередями, но по-старинке - без дилэев. Тут-то и вляпался… Каждая задача на себя одеяло тащит и никому не отдаёт. Пришлось натыкать в лупы…
Я вроде писал об этом. Если ты предпочитаешь форум докам от Еспрессив. Первым оператором в for(;;) {} надо ставить delay(1).
И последним, после цикла vTaskDelete(NULL);
Исправил. Все оказалось довольно просто - была неверная инициализация класса в случае использования сенсорных кнопок. Сама по себе ESP32 была вообще не причем.