Easyelectronics.ru

Электроника для всех
Текущее время: 29 сен 2020, 03:37

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 21 ] 
Автор Сообщение
 Заголовок сообщения: [РЕШЕНО]Затруднения с интерфейсом. Меню.
СообщениеДобавлено: 17 ноя 2016, 12:30 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3691
Откуда: Новосибирск
Ситуация такая: Есть: семисегментный светодиодный дисплей, три кнопки. Обзовем их Enter, Plus (она же Next), Minus (она же Prev).
Исходное состояние показ рабочего параметра. Длительное нажатие (3 сек) на Enter - вход в меню. Длительное нажатие (3 сек) - выход из меню.
Модуль клавиатуры выдает события: короткое нажатие, длительное нажатие и код кнопки.
Делаем длительное нажатие на кнопку Enter, входим в меню, если продолжать держать кнопку, то по истечении 3 секунд исправно выходим из меню. Я бы хотел убрать этот момент. То есть, отпускаем кнопку, опять длительное нажатие - выход из меню. И здесь у меня затруднения. Решения есть, но они мне не нравятся. Если бы было 4 кнопки (плюс Esc), этой проблемы бы не было вообще.
Ваши предложения.


Последний раз редактировалось demiurg1978 17 ноя 2016, 22:17, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Затруднения с интерфейсом. Меню.
СообщениеДобавлено: 17 ноя 2016, 12:34 
Старожил
Аватара пользователя

Зарегистрирован: 18 июн 2011, 16:29
Сообщения: 1888
Откуда: Докучаевск-Волноваха
Цитата:
если продолжать держать кнопку,

Если продолжать держать кнопку - код кнопки не меняется. Выходить из меню по длительному нажатию только если после предыдущего длительного нажатия код кнопки хотя бы раз поменялся.

_________________
Хранитель форума


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Затруднения с интерфейсом. Меню.
СообщениеДобавлено: 17 ноя 2016, 14:51 
Старожил
Аватара пользователя

Зарегистрирован: 05 фев 2010, 16:57
Сообщения: 2193
Откуда: Нальчик
Могу предложить свой вариант обработчика кнопки, у меня такого эффекта нет...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Затруднения с интерфейсом. Меню.
СообщениеДобавлено: 17 ноя 2016, 15:47 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3691
Откуда: Новосибирск
ShadS писал(а):
Могу предложить свой вариант обработчика кнопки, у меня такого эффекта нет...

Давай.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Затруднения с интерфейсом. Меню.
СообщениеДобавлено: 17 ноя 2016, 19:05 
Старожил
Аватара пользователя

Зарегистрирован: 05 фев 2010, 16:57
Сообщения: 2193
Откуда: Нальчик
Вечерком, как доберусь домой скину.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Затруднения с интерфейсом. Меню.
СообщениеДобавлено: 17 ноя 2016, 20:35 
Старожил

Зарегистрирован: 16 окт 2013, 01:27
Сообщения: 1555
У меня подобное меню было на флагах:

flag1 срабатывание вашей кнопки ENTER
flag2 - это если ваша кнопка была нажата 3 сек.
Timer - это закончились 3 сек.

Код:
If (flag1 && !flag2 && timer)  // т.е. кнопка Enter была нажата 3 сек, flag 2 не активирован, т.е. мы пока не вошли в меню, таймер 3 сек уже натикал
     {flag2=1; menu_deep=1; timer=0}
else
     { if (flag2 && menu_deep)....................  // а вот тут уже в меню, и дальше прописываете, что хотите 


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



Show "Вот нашел свои первые шаги в реализации подобного меню (3 года назад писал сканер )"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Затруднения с интерфейсом. Меню.
СообщениеДобавлено: 17 ноя 2016, 22:20 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3691
Откуда: Новосибирск
sed_alex писал(а):
...

Ваш код не читабелен. Извините.

Вопрос снят. Мой косяк. У меня несколько уровней удержания. На первом уровне параметр увеличивается с одной скоростью, на втором уровне с большей скоростью. Косяк был в том, что код удержания я присваивал на двух уровнях, отсюда вход в меню и выход из меню при длительном удержании.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Затруднения с интерфейсом. Меню.
СообщениеДобавлено: 18 ноя 2016, 02:10 
Старожил
Аватара пользователя

Зарегистрирован: 05 фев 2010, 16:57
Сообщения: 2193
Откуда: Нальчик
demiurg1978 писал(а):
На первом уровне параметр увеличивается с одной скоростью, на втором уровне с большей скоростью.
У тебя там реализован автоповтор при удержании? Ато у меня сама библиотека без функции автоповтора, автоповтор я реализую в основной программе, там где это необходимо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Затруднения с интерфейсом. Меню.
СообщениеДобавлено: 18 ноя 2016, 02:17 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3691
Откуда: Новосибирск
ShadS писал(а):
demiurg1978 писал(а):
На первом уровне параметр увеличивается с одной скоростью, на втором уровне с большей скоростью.
У тебя там реализован автоповтор при удержании? Ато у меня сама библиотека без функции автоповтора, автоповтор я реализую в основной программе, там где это необходимо.

Да. И причина проста. Или мы в одном месте реализуем, или при нескольких параметрах во стольких же местах. А если параметров десятки и более?
Show


Последний раз редактировалось demiurg1978 18 ноя 2016, 02:45, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Затруднения с интерфейсом. Меню.
СообщениеДобавлено: 18 ноя 2016, 02:39 
Старожил
Аватара пользователя

Зарегистрирован: 05 фев 2010, 16:57
Сообщения: 2193
Откуда: Нальчик
demiurg1978 писал(а):
причина проста. Или мы в одном месте реализуем, или при нескольких параметрах во стольких же местах. А если параметров десятки и более?
Ну да, в объемных программах твой способ наверное лучше...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Затруднения с интерфейсом. Меню.
СообщениеДобавлено: 18 ноя 2016, 02:47 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3691
Откуда: Новосибирск
Чуток подправил пример.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [РЕШЕНО]Затруднения с интерфейсом. Меню.
СообщениеДобавлено: 18 ноя 2016, 04:37 
Старожил
Аватара пользователя

Зарегистрирован: 05 фев 2010, 16:57
Сообщения: 2193
Откуда: Нальчик
Давай приколимся...

Я у себя тоже встроил авто повтор внутрь обработчика кнопок, и запилил примерчик...
Попробуй встрой свой обработчик кнопок вместо моего чтобы получился такой же функционал как в моем примере...
Хочу сравнить наши библиотеки, посмотреть плюсы и минусы...

Код:
коротко вправо - надпись "вправо"
коротко влево - надпись "влево"
коротко вверх - увеличение счетчика на 1
коротко вниз - уменьшение счетчика на 1
длинно вправо - дисплей мерцает
длинно влево - дисплей не мерцает
длинно вверх - авто увеличение счетчика
длинно вниз - авто уменьшение счетчика


Вложения:
AVRST4_SS.7z [39.48 Кб]
Скачиваний: 92
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [РЕШЕНО]Затруднения с интерфейсом. Меню.
СообщениеДобавлено: 18 ноя 2016, 06:13 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3691
Откуда: Новосибирск
ShadS писал(а):
...

В прерывании, либо с диспетчером. Не так ли? Даже пробовать не буду.
У меня работает в основном цикле. И теперь смотри. При условии, что заняты все таймеры или прерывания нельзя занимать. К примеру, генерация сигналов, запуск ацп по таймеру (при этом в прерывании пока идет преобразование, спим, на работу остальных модулей отведен только основной цикл). Давай посмотрим, что у тебя при этом получится.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [РЕШЕНО]Затруднения с интерфейсом. Меню.
СообщениеДобавлено: 18 ноя 2016, 10:35 
Старожил
Аватара пользователя

Зарегистрирован: 05 фев 2010, 16:57
Сообщения: 2193
Откуда: Нальчик
demiurg1978 писал(а):
В прерывании, либо с диспетчером. Не так ли? Даже пробовать не буду.
Ладно, не нужно в прерывании, сделай как смогеш, я просто хотел посмотреть как на практике твой вариант реализуется, и соответственно оценить его работу...

demiurg1978 писал(а):
У меня работает в основном цикле.
А как тогда у тебя отмеряются временные отрезки, например анализ дребезга или отсчет момента старта автоповтора?

demiurg1978 писал(а):
При условии, что заняты все таймеры или прерывания нельзя занимать. К примеру, генерация сигналов, запуск ацп по таймеру (при этом в прерывании пока идет преобразование, спим, на работу остальных модулей отведен только основной цикл).
Очень специфично... во первых по любому нужен один таймер для обработки временных отсчетов (развертка LED дисплея, внутренние часы и т.д.) именно на этом таймере у меня и работает клавиатура...

demiurg1978 писал(а):
Давай посмотрим, что у тебя при этом получится.
У меня получилось так как получилось, попробуй сделай подобный функционал так как тебе удобно, хочу увидеть твою клавиатуру в действии...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [РЕШЕНО]Затруднения с интерфейсом. Меню.
СообщениеДобавлено: 18 ноя 2016, 11:14 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3691
Откуда: Новосибирск
ShadS писал(а):
хочу увидеть твою клавиатуру в действии...

В смысле?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [РЕШЕНО]Затруднения с интерфейсом. Меню.
СообщениеДобавлено: 18 ноя 2016, 11:17 
Старожил
Аватара пользователя

Зарегистрирован: 05 фев 2010, 16:57
Сообщения: 2193
Откуда: Нальчик
demiurg1978 писал(а):
ShadS писал(а):
хочу увидеть твою клавиатуру в действии...

В смысле?
Ладно, проехали...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [РЕШЕНО]Затруднения с интерфейсом. Меню.
СообщениеДобавлено: 18 ноя 2016, 11:58 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3691
Откуда: Новосибирск
ShadS писал(а):
Ладно, проехали...

Сказал а, говори б. Это вопрос: в смысле? Сомнения в работоспособности примера? Хотел бы увидеть тестовый проект с примером? Другие причины?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [РЕШЕНО]Затруднения с интерфейсом. Меню.
СообщениеДобавлено: 18 ноя 2016, 12:01 
Старожил
Аватара пользователя

Зарегистрирован: 05 фев 2010, 16:57
Сообщения: 2193
Откуда: Нальчик
demiurg1978 писал(а):
Сказал а, говори б. Это вопрос: в смысле? Сомнения в работоспособности примера? Хотел бы увидеть тестовый проект с примером? Другие причины?
Ды вроде я ясно выразился:
Цитата:
хотел посмотреть как на практике твой вариант реализуется, и соответственно оценить его работу...
.....
как тогда у тебя отмеряются временные отрезки, например анализ дребезга или отсчет момента старта автоповтора?


Короче - мне не понятно, как в главном цикле (без использования _delay) можно организовать нормальный обработчик клавиатуры...
Вот и интересно взглянуть на рабочий примерчик...
Но если нет времени то не заморачивайся...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [РЕШЕНО]Затруднения с интерфейсом. Меню.
СообщениеДобавлено: 18 ноя 2016, 13:43 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3691
Откуда: Новосибирск
Позже, меня на работу дернули.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [РЕШЕНО]Затруднения с интерфейсом. Меню.
СообщениеДобавлено: 18 ноя 2016, 13:59 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 856
Декомпозиция и паттерн обработки событий спасет отцов русского клавиатурастроения.
Объекты кнопок должны генерировать события (клик, длительное удержание).

Меню должно подписываться на события, используя колбеки или более сложные методы.

Драйвер клавиатуры не должен знать, что там ему надо делать по части меню. Такое построение программы позволит сначала отдельно отладить клавиатуру, а потом позволит разрабатывать меню не задумываясь о природе возникающих событий.

Потому что это две несвязанные задачи.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [РЕШЕНО]Затруднения с интерфейсом. Меню.
СообщениеДобавлено: 18 ноя 2016, 15:49 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3691
Откуда: Новосибирск
ShadS писал(а):
Короче - мне не понятно, как в главном цикле (без использования _delay) можно организовать нормальный обработчик клавиатуры...

Я об этом уже неоднократно писал. Псевдопараллельность процессов. Принципы кооперативной и вытесняющей RTOS. От кооперативной взято выполнение кода от и до, от вытесняющей дробление процессов.

Принципы написания программ. Модульность. Каждый модуль полностью самостоятелен настолько насколько это возможно. Никаких долгих циклов. Каждый модуль, задача, процесс дробятся на составляющие. Дробление осуществляется условиями, флагами, состояниями конечных автоматов. Основной цикл представляет из себя по сути список функций. Каждый модуль-процесс-функция-задача за итерацию основного цикла выполняют только часть кода. Этим как в вытесняющей RTOS достигается псевдопараллельная работа всех модулей. И как в кооперативной, выполняется код от и до.

Если требуются отсчеты временных интервалов кратные системному тику, используем программные таймеры. Под эту задачу берется один аппаратный таймер. Исходя из задачи задается время системного тика. В моих проектах - это 1 мс. Это значит, что в каждом модуле дробим задачи-процессы на составляющие с тем условием, чтобы основной цикл (с прерываниями!) выполнился с запасом за 1 системный тик. Именно поэтому я по максимуму все переношу в основной цикл.

Пример программного таймера.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB