у меня тоже есть проекты с подобным алгоритмом, но обработку кнопок я делаю не так: использую сканирование если есть дин. индикация или много кнопок, или счетчики итераций, (но всё единым блоком, считаю нечего там делить) за алгоритм с применением одного счетчика спасибо. А вот алгоритм состояний использую вместо делай_мс: в начале функции счетчик, который заряжается для создания задержки, а саму функцию размазываю по свитч-кейс.
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
из минусов - в таком включении (из осн. цикла) 1) при любом длительном вычислении (цикле, прерывании, ожидании события) клава мрёт и возможности нажать "Ctrl+Alt+Del" уже не будет, и при большом количестве тяжестей в коде в первую очередь будет страдать клавиатурный ввод
О, а вот и признак профнепригодности #1, когда у нас вся программа стопорится, ожидая события. Это уже клиника. Причем справедливо что для рилтайм, что для кодинга как такового вообще.
У каждого из семейств МК имеются некоторые нюсансы в системе команд и устройстве ядра. Поэтому алгоритм подогнанный и наиболее успешно работающий на одном из семейств может оказаться весьма неудачным для применения на другом семействе и наоборот. Приходится всегда выбирать решение исходя из конкретной схемотехники применяемых датчиков и особенностей семейства применяемого в схеме МК.
Насчет "стопорится исполнение до события" - ВСЕ зависит от цели ВСЕГО устройства. Поэтому может в разных случаях быть как ОБЯЗАТЕЛЬНЫМ так и НЕДОПУСТИМЫМ для применения. По крайней мере "безысходный останов в ожидании" парируется дополнительным таймером обработки аварийного состояния (аварийный останов по повреждении клавиатуры/Оператора).
Если в проекте много кнопок и ламп, я все это вешаю на микросхему TPIC6B595 (74HC595 + ULN2803). 8 кнопок + 8 ламп. В регистр (595) записывается один 0 и 8 раз "двигается". В процессе зажигая(если нужно) лампы и опрашивая кнопки. Все это тактируется одним из таймеров (Timer0) чтоб свечение ламп было ровным. По окончании 8 тактов имеем в переменной состояние кнопок. НО эта информация не передается сразу на обработку. Состояние трех последних тактов "накапливается" в трех переменных и при их равенстве отправляется на обработку. Это и есть защита от дребезга. В приложенном примере - отправляется в подпрограмму-декодер после чего получаю код нажатой кнопки и флаг состояния. Этот код и обрабатывается программой. В примере программа реагирует и на длинное нажатие кнопок - декодер выдает соответствующий код.
Пример - это кусок бОльшего проекта. Программа на BascomAVR. Пр нажатии кнопки загорится соответствующая ей лампа, если её удерживать, то эта лампа погаснет, а остальные загорятся. При отпускании кнопки все лампы гаснут.
TEST_V14.bas - программа drv_595_key_lamp_dim.bas - "драйвер" . Переменные и описание drv_595_key_lamp_sub.bas - Программа "драйвера". Здесь же ПП "Sb_595_test1" Которая "реагирует" на кнопки и зажигает лампы.
Мне так удобно писать кусками. При необходимости цепляя код к нужному проекту.
Есть ещё нюансы в работе с кнопками: Чаще всего кнопку обрабатывают сразу после нажатия, НО по моему лучше это делать после отпускания кнопки, особенно если эта же кнопка должна еще реагировать и на длинное нажатие. А если нужно реагировать на комбинированные нажатия, то не представляю как это сделать до отпускания кнопок. В примере программа реагирует и на нажатие (зажигает 1 лампу) и на отпускание (гаснет все). А так же на удержание(все горят, кроме одной).
P.S. В схеме забыл нарисовать диоды перед каждой кнопкой.
Вложения:
Комментарий к файлу: Пример на TPIC6B595 Пример на TPIC6B595.7z [34.75 KiB]
Скачиваний: 107
_________________ Одни хотели бы понимать то, во что верят, другие - поверить в то, что пнимают.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
довольно часто в поделках (причем не только любительских)
Примеры в студию. Особенно того, что в скобках.
вот, из того, что у меня есть: (правда не кнопки, а энкодеры) климатконтроль фольксваген поло, и стиралка LG - стоит крутить чуть быстрее и... климат сразу по несколько пунктов добавляет, а стиралка вообще в игнор уходит.
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Сейчас этот форум просматривают: Google [Bot] и гости: 47
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения