ДронЗавод
2.41K subscribers
240 photos
113 videos
13 files
26 links
Производим FPV дроны. По всем вопросам @dronemaster @techno_drone
Чат https://xn--r1a.website/dronesfactoryc
Биткоин кошелек для пожертвований: перемещен
Download Telegram
Media is too big
VIEW IN TELEGRAM
🔧 Разработка state машины для обработки кнопок: больше, чем просто нажатие!

Наверняка многие из вас сталкивались с задачей обработки нажатий кнопок в своих проектах. На первый взгляд, задача выглядит простой: реагировать на нажатия двух кнопок. Но когда дело доходит до определения коротких и длинных нажатий, одновременных нажатий и устранения дребезга, процесс становится гораздо интереснее и сложнее.

🎯 Основные задачи:
1. Устранение дребезга при нажатии и отпускании кнопок.
2. Определение коротких нажатий.
3. Определение длинных нажатий.
4. Обработка одновременных нажатий обеих кнопок.

🛠 Структура нашей state машины с подробными переходами:

- IDLE (Ожидание):
- Ждём нажатия кнопки.
- При нажатии любой кнопки переходим в состояние DEBOUNCE и отмечаем время.

- DEBOUNCE (Устранение дребезга):
- Проверяем, прошло ли время дребезга (30 мс).
- Если да и кнопку отпустили, возвращаемся в IDLE.
- Если да и кнопку удерживают, фиксируем состояние кнопок и переходим в PRESS_FIXED.

- PRESS_FIXED (Проверка фиксированного нажатия):
- Если обе кнопки удерживаются:
- при отпускании до 1000 мс: переход в SHORT_PRESS_BOTH.
- при удержании более 1000 мс: переход в LONG_PRESS_BOTH.
- Если одна кнопка удерживается:
- при отпускании до 1000 мс: переход в соответствующее SHORT_PRESS состояние.
- при удержании более 1000 мс: переход в соответствующее LONG_PRESS состояние.

- SHORT_PRESS_UP, SHORT_PRESS_DOWN, SHORT_PRESS_BOTH:
- Обрабатывать короткое нажатие.
- Сохранять настройки.
- Переход в состояние RELEASE_DEBOUNCE для ожидания устранения дребезга при отпускании.

- LONG_PRESS_UP, LONG_PRESS_DOWN, LONG_PRESS_BOTH:
- Обрабатывать длинное нажатие с повторяющимся действием (например, увеличение/уменьшение чувствительности).
- Сохранять настройки.
- При отпускании переход в RELEASE_DEBOUNCE.

- RELEASE_DEBOUNCE (Устранение дребезга при отпускании):
- Проверять, прошло ли достаточное время для устранения дребезга при отпускании (30 мс).
- Возвращаться в состояние IDLE.

📊 Итоги:
- Реализация state машины для обработки кнопок может быть непростой задачей.
- Важно думать о всех возможных состояниях и переходах между ними.
- Учитывайте устранение дребезга для стабильной работы вашей системы.

Обработка нажатий кнопок – это искусство! 🎨 Поделитесь своим опытом и лайфхаками в комментариях. 👇

#Программирование #Задачи #Arduino #Электроника #StateMachine #филин
👍8🔥4🤓3