Показать сообщение отдельно
Старый 19.10.2018, 13:01   #25
vics13
 
Адрес: Бердянськ
Возраст: 54
Сообщений: 17,383
Машина: Slavuta 110308 1.3Si
Длина: 212940мкм
Диаметр: 37мм
По умолчанию

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

Для першого разу ардуїна проканає. У мене Мега2560. А код тупо не влазить в Нану чи Уно. Займатися ж перепилюванням готової ліби, яка вирішує 80% моїх потреб немає сенсу. Та й зайнятість критичних ресурсів якось не особливо парить. Мега2560 зараз працює в N2k мережі де є 2 лоріковські голови, Point-1, моторгайд, ходовий двигун Ямаха, датчик залишку і розходу палива. І при цьому сама є нодою і шле підтасовані дані в мережу. Ну ще для крокового двигуна тікає таймер 1000 разів за 10-30 сек.
Так от чому ж я і запитав. В цьому перериванні таймера просто визначати стан порту із кнопками а потім вже не поспішаючи вияснити шо було натиснуто і зробити дебаунс. Тим більш в час коли натиснута кнопка основна діяльність припиняється до встановлення нових параметрів.
__________________
СМИ сегодня есть инструмент идеологии, а не информации.
Главное в их сообщениях — идеи, внедряемые в наше сознание контрабандой.
vics13 вне форума   Ответить с цитированием