Показать сообщение отдельно
Старый 18.10.2018, 22:41   #24
Yurasvs
 
Адрес: Днепропетровск
Сообщений: 11,692
Машина: Таврия 1.3 инж, переделанная из карбовой, с ГБО4 и вариатором зажигания
Длина: 65760мкм
Диаметр: 32мм
По умолчанию

Ардуино - страшная штука для отравления мозгов. Начинать с Ардуины категорически не советую. Лучше программировать на нормальном Си с помощь любого компилятора (IAR, Keil, Icc, GCC) и заливать готовый Хекс в Ардуину с помощью ее же загрузчика. Сама жесткая структура скетча и занятость многих важных ресурсов проца под собственные нужды "Ардуино ОС" сильно мешают жить. Например, из всего трех встроенных таймеров Меги 328, которая стоит в Ардуино Уно, один занят под системные нужды, 2 других тоже доступны с некоторыми ограничениями. Но если уж взялись...
Подходов к устранению дребезга может быть много разных. Все зависит от наличия свободных ресурсов скорости выполнения основного цикла и т.д. Проще всего опрашивать кнопки реже, чем раз в 50мс где-то, тогда дребезг будет незаметен. Если важна скорость реакции, лучше опрашивать в прерывании. Эффективный алгоритм антидребезга здесь
http://embedders.org/blog/gdi/debouncing.html
Этот код настолько прост и быстр, что его можно засунуть непосредственно в прерывание , вызываемое по таймеру несколько десятков раз в секунду. Но я обычно в прерывании только определяю, что какая-то из кнопок изменила положение (неважно какая, сравниваю со старым значением все биты сразу в одно действие). При обнаружении изменения выставляю флаг, который неспешно обрабатывается и сбрасывается основным циклом, он уже разбирается , что именно нажато и что надо с этим делать.
__________________
Кремлевский дед слетел с катушек, и все, что строил
20 лет, разрушил.
Yurasvs вне форума   Ответить с цитированием