И так код
if(digitalRead(11)==HIGH) { menu--; } if(digitalRead(9)==HIGH) { menu++; }
Он выполняется, но нажатие на кнопку выполняет каждое действие два раза. То есть выполнение условий menu надо писать нечётные: 1 , 3 ,6 , 9 , 12……
Так что с этим делать? Кнопки подтянуты к земле резистором на 4,7 ком
3 комментария на «“Дребезг контактов или фигня с переменной++”»
На кнопку сложнее код нужен. Если вы нажмете кнопку, и на pin11 к примеру будет HIGH, то каждый цикл программа будет добовлять по 1. Для меню это удобно, но тогда надо задержку добавить. Я бы наверное сделал так.
Но по-хорошему я бы изменил, чтобы программа видела нажатую кнопку.
Если грубо, и важно, чтобы программа видела только одно нажатие, то код такой:
Этот код может работать неправильно для некоторых задач, т.к. проц занят, программа не работает во время нажатия кнопки.
Я в своей программе всё равно использовал таймер (библиотека TimerOne), поэтому просто добавил в него отсчёт 100 миллисекунд.
При нажатии кнопки, помимо прочего, устанавливается флаг неактивности клавиатуры, т.е. пока флаг установлен — нажатие кнопок не обрабатывается.
Через 100 мс таймер сбрасывает флаг и всё работает, как обычно.
Благодаря использованию таймера программа не тормозится, всего лишь добавляется несколько сравнений.
Если нужен код — добавлю позже)
Полностью согласен. Флаги полностью избавляют от необходимости «ожидать». Сам ими пользуюсь.
О такой библиотеке не знал почему-то) Спасибо. Я с ардуино совсем недавно вместе =)