http://forum.getchip.net/

Кнопка
http://forum.getchip.net/viewtopic.php?f=16&t=859
Страница 1 из 2

Автор:  -sergius- [ 30 апр 2018, 18:36 ]
Заголовок сообщения:  Кнопка

Здравствуйте уважаемые гуру Algoritm Builder. Покажите на примере как реализовать в Algoritm Builder короткое и длинное нажатие кнопки и тоже самое но в прерывании INT0. Я новичок в этом деле, по этому желательно с комментариями. Заранее благодарен!

Автор:  SVN [ 30 апр 2018, 20:09 ]
Заголовок сообщения:  Re: Кнопка

Можно посмотреть или (в шаблонах модуль EX_Key).

ИМХО. В прерывании по INT0 кнопки опрашивать не кошерно. ;)

Автор:  -sergius- [ 30 апр 2018, 22:36 ]
Заголовок сообщения:  Re: Кнопка


Автор:  SVN [ 01 май 2018, 07:04 ]
Заголовок сообщения:  Re: Кнопка


Автор:  -sergius- [ 01 май 2018, 13:15 ]
Заголовок сообщения:  Re: Кнопка


Автор:  SVN [ 01 май 2018, 15:59 ]
Заголовок сообщения:  Re: Кнопка

Если речь идут о реализации с помощью модуля EX_Key, то вначале нужно разобраться в алгоритме данного модуля. Ты это уже сделал? Если нет, то подскажу: В макрос «по нажатию» вход производится однократно, только в момент определения нажатия кнопки. В макрос «по удержанию» вход производится периодически – пока удерживается кнопка. В макрос «по отпусканию» вход производится так же однократно, как и при нажатии только в момент определения отпускания кнопки.
Таким образом как я писал ранее, короткое нажатие лучше определять когда кнопка будет отпущена. А вот длительное нажатие можно зафиксировать в макросе «по удержанию». Что для этого понадобится? Создать дополнительно переменную счётчика удержание данной кнопки (назовём её допустим Timer_Key). Где будешь создавать данную переменную (в SRAM или в РОН) дело вкуса.
Так вот количество отсчётов в данной переменной и будет соответствовать короткому или длительному нажатию. Увеличение на единицу данной переменной производится в макросе «по удержанию». Там же проверяется и результат суммы данной переменной. Если она достигла значения для длительного нажатия, то фиксируем данный момент (к примеру зажигаем красный светик LED_Red).
В макросе «по отпусканию» проверяем состояние данного светика LED_Red. Если он не активен, то зажигаем зелёный светик (LED_Green - который указывает на короткое нажатие). Если же светик LED_Red активен, то тушим его и за одно очищаем переменную Timer_Key.
Надеюсь сам догадаешься как можно потушить зелёный светик если он будет активирован.

Автор:  -sergius- [ 02 май 2018, 12:55 ]
Заголовок сообщения:  Re: Кнопка

Проверьте пожалуйста и дайте свои рекомендации.

Вложения:
button.jpg
button.jpg [ 78.79 КБ | Просмотров: 14146 ]

Автор:  SVN [ 02 май 2018, 14:54 ]
Заголовок сообщения:  Re: Кнопка

Закономерные ошибки начинающих:
Не учтено быстродействие МК при выполнении процедур. Ты даже моргнуть не успеешь, а переменная Timer_Key переполнится несколько десятков раз. Если предположить, что твой МК остался на заводской частоте, то это 1 МГц… то бишь твоя переменная Timer_Key будет прибавлять 1 почти примерно каждые 10 мкс. А за секунду переменная сколько раз переполнится? Вот и я о том же…
Подпрограмма Button в твоём варианте должна вызываться не из тела программы, а по какому либо прерыванию (к пимеру по Timer0 или Timer1.)
И ещё… порт DDRB.0 должен быть сконфигурирован на вход, а не на выход… иначе при нажатии кнопки выгорит порт.

PS. А вообще лучше пример свой кидать сюда полностью, а не скрин.

Автор:  -sergius- [ 02 май 2018, 17:21 ]
Заголовок сообщения:  Re: Кнопка



Вложения:
Кнопка (нажать или удержать).zip [10.92 КБ]
Скачиваний: 753

Автор:  SVN [ 02 май 2018, 18:30 ]
Заголовок сообщения:  Re: Кнопка



Вложения:
-sergius-_Button.zip [7.45 КБ]
Скачиваний: 875
1.png
1.png [ 26.26 КБ | Просмотров: 14129 ]

Страница 1 из 2 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/