Страница 14 из 15
Re: Обработка нажатия кнопки в AVR...
Добавлено: Вс янв 11, 2015 19:17:34
tantrum
Потому что я не могу понять, как можно добавить тикающий таймер в обработчик нажатия кнопки...

Re: Обработка нажатия кнопки в AVR...
Добавлено: Вс янв 11, 2015 22:23:53
shads
tantrum писал(а):Как сделать так, чтобы, например, при удерживании кнопки в течении 3х секунд, выполнялся иной участок кода, чем просто при кратковременном нажатии?
http://asis-kbr.ru/forum/viewtopic.php?f=13&t=173
Re: Обработка нажатия кнопки в AVR...
Добавлено: Вс янв 11, 2015 23:34:19
Alexeyslav
Кнопка ведь опрашивается по таймеру? тогда просто считаем нужное количество опросов когда кнопка нажата непрерывно и достигнув некоторого значения считаем что кнопка нажата более 3-х секунд.
Простой рассчет: если кнопку опрашиваем каждые 10мс, то для 3 секунд надо чтобы она была нажата на протяжении 3000мс/10мс = 300 опросов.
Re: Обработка нажатия кнопки в AVR...
Добавлено: Пн янв 12, 2015 11:52:09
pokk
А мне вот такой вариант больше понравился.
Авто повтор это и есть длительное нажатие.
http://www.kit-e.ru/articles/circuit/2007_08_170.php
Re: Обработка нажатия кнопки в AVR...
Добавлено: Пн янв 12, 2015 20:32:34
tantrum
Re: Обработка нажатия кнопки в AVR...
Добавлено: Пн янв 12, 2015 21:10:31
rxstart1
А если так, заводим переменную trig как только кнопка нажата if (!trig) {TCNT=0;count=0;trig=1;} и все в обработчике таймера скажем по совпадению увеличиваем count на 1 итак как только count=6 значит кнопка удерживается 3 сек. Как только кнопка отпущена trig=0;
Re: Обработка нажатия кнопки в AVR...
Добавлено: Пн янв 12, 2015 21:21:07
tantrum
На языке Си можно, пожалуйста?
Re: Обработка нажатия кнопки в AVR...
Добавлено: Вт янв 13, 2015 08:26:28
Аlex
Причём тут язык ? Вам уже всё разжевали (описали алгоритм), осталось только "в рот положить". Что ещё нужно ?
Если уж Вы так хорошо знаете Си, что просите конкретно для него, то перевести на него с человеческого не составит Вам никакого труда.
Re: Обработка нажатия кнопки в AVR...
Добавлено: Вт янв 13, 2015 23:28:51
tantrum
Алгоритм ясен и так...
Я не знаю, как это программно реализуется
Re: Обработка нажатия кнопки в AVR...
Добавлено: Ср янв 14, 2015 05:24:20
Mishany
вот тут на си и короткое и длинное нажатие есть в отдельной функции....
архивчик ну и как это выглядит
видео работы
Re: Обработка нажатия кнопки в AVR...
Добавлено: Вт апр 14, 2015 00:37:54
fox15
Господа Коты!
С добрым Мяу!
Я тут мимо пробегал (ну так за рыбой

), дай думаю зайду, увидел обсуждение по поводу кнопок, дребезга, нажатий.
Скажите ка, тема еще открыта?
Если еще нужно, могу выложить свой алгоритм.
Re: Обработка нажатия кнопки в AVR...
Добавлено: Вт апр 14, 2015 07:36:21
Аlex
Re: Обработка нажатия кнопки в AVR...
Добавлено: Пт апр 01, 2016 08:46:03
postal2201
Друзья, только начинаю осваивать Си, так что не судите строго

Помогите разобрать следующий код обрабатывающий кнопки:
Спойлер
Код: Выделить всё
void getkey(void)
{
if(PIND.4 == 0)
{
REQUIRED_TEMP = d;
u = t_max;
if (PIND.2 == 0)
{
delay_ms(20);
if(PIND.2 ==0)
REQUIRED_TEMP++;
d = REQUIRED_TEMP;
}
if (PIND.3 == 0)
{delay_ms(20);
if(PIND.3 ==0)
REQUIRED_TEMP--;
d = REQUIRED_TEMP;
}
}
else
{
REQUIRED_TEMP = u;
d = t_min;
if (PIND.2 == 0)
{
delay_ms(20);
if(PIND.2 ==0)
REQUIRED_TEMP++ ;
u = REQUIRED_TEMP;
}
if (PIND.3 == 0)
{delay_ms(20);
if(PIND.3 ==0)
REQUIRED_TEMP-- ;
u = REQUIRED_TEMP;
}
}
return;
}
unsigned char fSelButton()
{
unsigned char selbut;
selbut=PIND;
selbut&=(0b00001100);
//цикл антидребезга контактов
while((PIND&0b00000000)==0b00000100 || (PIND&0b00000000)==0b00001000 || (PIND&0b00000000)==0b00010000 || (PIND&0b00000000)==0b00100000);
return selbut;
}
Конкретно для чего там else. Если я правильно понимаю, если кнопка PIND.4 нажата то устанавливаем REQUIRED_TEMP = d, u = t_max, далее если PIND.2 нажата - прибавляем температуру, если PIND.3 то уменьшаем
Re: Обработка нажатия кнопки в AVR...
Добавлено: Пт апр 01, 2016 18:44:01
Alexeyslav
ужас ужас ужас. Да оно у тебя при нажатии на кнопку вжииик за 1 секунду 50 пунктов уйдёт.
раз уж использовать задержку, то я бы просто опрашивал бы кнопки каждые 100мс запоминал бы эти биты а потом строил бы условия с этими сохранёнными битами без опаски их изменения из-за дребезга. А каждый пятый или второй опрос выполнял бы действие соответствующее функции кнопки.
На каждую кнопку заведи циклический счётчик с периодом счёта 5 к примеру. Кнопка не нажата - сответствующий счётчик принудительно устанавливается в ноль. Иначе - считает в "+" в цикле самого опроса, когда он равен "1" -делаем соответствующее действие, иначе прокручиваемся дальше.
И никаких дополнитеьных действий по устранению дребезга не нужно - сам опрос с сохранением значения с интервалом 100мс гарантирует отсутствие влияния дребезга на результат.
Можно опрашивать с интервалом в 50мс и считать до 10...
Re: Обработка нажатия кнопки в AVR...
Добавлено: Ср фев 15, 2017 19:02:12
infinity19891
Всем привет. Такой вопрос: пишу программу для устройства в AVR Studio 4, на Си. Нужно сделать так, чтобы после включения можно было включить один из 4-х режимов работы отдельной кнопкой, при этом 5-я кнопка должна останавливать работу в этом режиме и возвращать устройство в исходное состояние. И вот проблема: как реализовать это программно? Помогите кто может... Исходники прикрепляю.
Re: Обработка нажатия кнопки в AVR...
Добавлено: Ср фев 15, 2017 19:08:29
AR_AROV
infinity19891 писал(а):Всем привет. Такой вопрос: пишу программу для устройства в AVR Studio 4, на Си. Нужно сделать так, чтобы после включения можно было включить один из 4-х режимов работы отдельной кнопкой, при этом 5-я кнопка должна останавливать работу в этом режиме и возвращать устройство в исходное состояние. И вот проблема: как реализовать это программно? Помогите кто может... Исходники прикрепляю.
stend.zip
Так кнопок 5 или 2?
Re: Обработка нажатия кнопки в AVR...
Добавлено: Ср фев 15, 2017 19:28:07
infinity19891
Так кнопок 5 или 2?
5 кнопок. 1 - режим 1, 2 - режим 2, 3 - режим 3, 4 - режим 4, 5 - отмена и сброс. Вообще, думал сначала сделать это в виде меню на 4 кнопках, но 3 года не писал ничего, многое подзабыл.
Re: Обработка нажатия кнопки в AVR...
Добавлено: Ср фев 15, 2017 19:59:56
Zhuk72
При наличии индикации можно вообще на одной кнопке сделать.
Короткое нажатие перебирает режимы по одному, удержание в нажатом состоянии (>1c) возвращает в начальное состояние.
Re: Обработка нажатия кнопки в AVR...
Добавлено: Ср фев 15, 2017 20:02:49
Аlex
infinity19891, а в чём, собссна, проблема то ?
Такую программищу написали, а обычный опрос вывода не можем сделать ? Бред какой-то...

Re: Обработка нажатия кнопки в AVR...
Добавлено: Чт фев 16, 2017 08:42:28
infinity19891
Аlex, в том и проблема, что забыл как кнопки опрашивать.