Помогите с обработкой кнопки

Нет. Этот скетч работает:

byte A;
void setup() {
pinMode(5, OUTPUT);
pinMode(14, INPUT);
digitalWrite(5, LOW);
}
void loop() {
A = digitalRead(14);
if (A == 1)
{digitalWrite(5, HIGH);}
else
{digitalWrite(5, LOW);}
}

Значит кнопка работает.

тогда какие сомнения? - напишите работу с кнопками сами да и дело с концом.

Добро бы речь шла о каком-то заумном протоколе - там понятно, что вникание самому в суть может занять больше времени, чем поиск ошибки в библиотеке. а тут проще взять и написать

Дак а к чему сводится работа с кнопкой? Основное, что нужно, это подавить дребезг, а делается это в подавляющем большинстве случаев через millis() - выжидаем некое время после факта изменения логического уровня на пине, например, 100 мс, и после чего совершаем необходимые действия. Я так уже пробовал, обрабатывал нажатие “вручную” через millis() - толку ноль. Единственное, что я еще не пробовал - это давить дребезг через delay, но тогда МК будет тормозить, а это не комильфо, учитывая, что есть такие вещи, как динамическая индикация. Интересен тот факт, что даже обработка нажатия кнопки через внешнее прерывание не даёт результата. Такое вообще возможно?

А на соседний пин ежели перекинуть?

Так не бывает.
Для начала поменяйте ардуину и кнопку - может и правда дело в железе, а вы тут будете над кодом голову ломать.

Если эффект не пропадет - я бы на вашем месте для начала написал простейший код чтения кнопки с отработкой дребезга - только кнопку, как в посте 20. И если он не будет работать - убирал бы и добавлял отдельные части, пока не понял, в чем дело.

Ведь у тысяч других людей кнопки работают… значит в вашем случае надо просто найти причину.

Я об этом думал. Дело в том, что МК уже распаян на плате, и кнопка тоже. Шаг у TQFP микроконтроллера маленький, дорожки тонкие и расположены плотно, поэтому менять что-то будет проблематично, учитывая, что задействованы все пины МК.

Ну, тогда у вас нет средств диагностики. Гадать остаётся.

да черт с ней, с платой. Возьмите обычную ардуину, запустите на ней код из поста 20 - работает? Если да, а у вас на плате нет - значит ищите ошибки в железе, код не при чем

Вы, наверное, имеете ввиду пост 17? Код из поста 20 работает. Пожалуй, да, попробую загрузить тот же код на другую плату или МК. Другого не остаётся. Либо поменять местами А0 и А1, благо они находятся рядом. Но придётся портить плату.

да, тот что с библиотекой и дребезгом.

Для чистоты эксперимента, возьмите обычную ардуину, не надо микроконтроллер.

хорошо. Попробую. Отпишусь, как пройдут дела.

Вы знаете, как раз один из наиболее эффективных алгоритмов “разобраться” с неправильно работающей программой заключается в ее переписывании.
По-научному называется рефакторинг.

PS. Да, еще одно полезное слово - отладка. В Ардуине специально для отладки придуман Serial. Выводите в него какие-нибудь символы, которые могли бы помочь Вам понять, какие ветки программы выполняются, а какие - нет.

Да чувствую, что придётся по итогу так и поступить.

Serial выводится через юсб в ардуино, а у меня отдельно МК на своей плате, программируется через ISP. Для того, чтобы отслеживать функционирование всех составляющих моего устройства, придётся городить большой стенд с ардуино, цифровыми индикаторами, кнопками, светодиодами.

Вот поэтому сначала отлаживают всю систему на макетке и только потом разводят плату и заливают в нее уже отлаженную прошивку.
Впрочем, Вам уже посоветовали отлаживаться на макете.
Иногда, кстати, полезно отладиться на Меге, чтобы потом залить прошивку в нано/мини.

Это нормально. Просто Вы явно недооценили объем работы по отладке прошивки, поэтому сборка стенда Вам кажется объемной работой (по сравнению с отладкой - это мизер).

Попробовал, на ардуине работает. Единственное, что поменял в скетче - пин, отвечающий за зажигание светодиода. Загрузил тот же скетч на свою плату - не работает скетч. На нажатие кнопки ноль внимания.

Проверяйте разводку платы для начала

Я делаю так: напаиваю все компоненты на плату, включая микроконтроллер. Потом пишу тестовую прошивку, чтобы проверить функционирование всех узлов. Если всё работает - приступаю к написанию основного скетча. Сейчас сделал так же, всё работало, потом просто как сглазили.
Есть мысль, что пин А0 потерял контакт с платой, хочу попробовать пропаять. Но что то сомневаюсь

Всё с ней хорошо. Единственное место, которое может влиять на работу кнопки - сама кнопка (а с ней всё ок) и пайка МК к плате, что я и хочу проверить.

Как-то я на этом чуть не погорел.
Нет, сначала, как положено, отладился на макетке. Но когда начал разводить плату, обнаружил, что, если перебросить SPI и I2C на альтернативные пины (это stm32), то разводка получается гораздо проще. Хорошо, что все-таки решил проверить это на макетке: оказалось, в чипе ошибка (известная, в errata опубликована, но а дэйташите, естественно, нет), ришлось разводить первоначальный вариант.

Интересно, а как происходит отладка основного скетча (по теории написание - это лишь 1% всех трудозатрат)?

Понятно ) только вот я ничего не менял. Единственное, это переназначал внешнее прерывание на пин А0/14. Но что с этим переназначением, что без прерывания (а просто с библиотекой, обрабатывающей нажатие кнопки в основном цикле loop) кнопка ничерта не работает.

Да как же… Написал скетч частично, реализовав одну функцию, залил, проверил, если работает - продолжаю писать скетч, добавляя новые функции. Если не работает или работает не так, как надо - изучаю скетч, ищу ошибку. Переписываю, заливаю снова, проверяю. Ну, в общем, как 97% (наверное) всех “ардуинщиков” :slight_smile: