Обработка нажатия кнопки в AVR...
- tantrum
- Мучитель микросхем
- Сообщения: 447
- Зарегистрирован: Сб фев 09, 2013 11:39:13
- Откуда: Украина, Марганец
Re: Обработка нажатия кнопки в AVR...
Потому что я не могу понять, как можно добавить тикающий таймер в обработчик нажатия кнопки... 
Re: Обработка нажатия кнопки в AVR...
tantrum писал(а):Как сделать так, чтобы, например, при удерживании кнопки в течении 3х секунд, выполнялся иной участок кода, чем просто при кратковременном нажатии?
http://asis-kbr.ru/forum/viewtopic.php?f=13&t=173
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Обработка нажатия кнопки в AVR...
Кнопка ведь опрашивается по таймеру? тогда просто считаем нужное количество опросов когда кнопка нажата непрерывно и достигнув некоторого значения считаем что кнопка нажата более 3-х секунд.
Простой рассчет: если кнопку опрашиваем каждые 10мс, то для 3 секунд надо чтобы она была нажата на протяжении 3000мс/10мс = 300 опросов.
Простой рассчет: если кнопку опрашиваем каждые 10мс, то для 3 секунд надо чтобы она была нажата на протяжении 3000мс/10мс = 300 опросов.
Re: Обработка нажатия кнопки в AVR...
А мне вот такой вариант больше понравился.
Авто повтор это и есть длительное нажатие.
http://www.kit-e.ru/articles/circuit/2007_08_170.php
Авто повтор это и есть длительное нажатие.
http://www.kit-e.ru/articles/circuit/2007_08_170.php
- rxstart1
- Вымогатель припоя
- Сообщения: 508
- Зарегистрирован: Пт фев 22, 2013 18:00:43
- Откуда: Беларусь, г. Гомель
Re: Обработка нажатия кнопки в AVR...
А если так, заводим переменную trig как только кнопка нажата if (!trig) {TCNT=0;count=0;trig=1;} и все в обработчике таймера скажем по совпадению увеличиваем count на 1 итак как только count=6 значит кнопка удерживается 3 сек. Как только кнопка отпущена trig=0;
- tantrum
- Мучитель микросхем
- Сообщения: 447
- Зарегистрирован: Сб фев 09, 2013 11:39:13
- Откуда: Украина, Марганец
Re: Обработка нажатия кнопки в AVR...
На языке Си можно, пожалуйста?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Обработка нажатия кнопки в AVR...
Причём тут язык ? Вам уже всё разжевали (описали алгоритм), осталось только "в рот положить". Что ещё нужно ?
Если уж Вы так хорошо знаете Си, что просите конкретно для него, то перевести на него с человеческого не составит Вам никакого труда.
Если уж Вы так хорошо знаете Си, что просите конкретно для него, то перевести на него с человеческого не составит Вам никакого труда.
- tantrum
- Мучитель микросхем
- Сообщения: 447
- Зарегистрирован: Сб фев 09, 2013 11:39:13
- Откуда: Украина, Марганец
Re: Обработка нажатия кнопки в AVR...
Алгоритм ясен и так...
Я не знаю, как это программно реализуется
Я не знаю, как это программно реализуется
- Mishany
- Электрический кот
- Сообщения: 1031
- Зарегистрирован: Чт июн 20, 2013 00:00:58
- Откуда: москва, м.Сходненская
Re: Обработка нажатия кнопки в AVR...
вот тут на си и короткое и длинное нажатие есть в отдельной функции....
архивчик ну и как это выглядит видео работы
архивчик ну и как это выглядит видео работы
- fox15
- Первый раз сказал Мяу!
- Сообщения: 28
- Зарегистрирован: Вс май 24, 2009 22:25:36
- Откуда: Russia
- Контактная информация:
Re: Обработка нажатия кнопки в AVR...
Господа Коты!
С добрым Мяу!
Я тут мимо пробегал (ну так за рыбой
), дай думаю зайду, увидел обсуждение по поводу кнопок, дребезга, нажатий.
Скажите ка, тема еще открыта?
Если еще нужно, могу выложить свой алгоритм.
С добрым Мяу!
Я тут мимо пробегал (ну так за рыбой
), дай думаю зайду, увидел обсуждение по поводу кнопок, дребезга, нажатий.Скажите ка, тема еще открыта?
Если еще нужно, могу выложить свой алгоритм.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Обработка нажатия кнопки в AVR...
Вот тема по кнопкам - viewtopic.php?f=61&t=79801 Можете туда выкладывать.
- postal2201
- Нашел транзистор. Понюхал.
- Сообщения: 164
- Зарегистрирован: Чт янв 17, 2013 20:28:05
Re: Обработка нажатия кнопки в AVR...
Друзья, только начинаю осваивать Си, так что не судите строго
Помогите разобрать следующий код обрабатывающий кнопки:
Конкретно для чего там else. Если я правильно понимаю, если кнопка PIND.4 нажата то устанавливаем REQUIRED_TEMP = d, u = t_max, далее если PIND.2 нажата - прибавляем температуру, если PIND.3 то уменьшаем
Спойлер
Код: Выделить всё
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 то уменьшаем
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Обработка нажатия кнопки в AVR...
ужас ужас ужас. Да оно у тебя при нажатии на кнопку вжииик за 1 секунду 50 пунктов уйдёт.
раз уж использовать задержку, то я бы просто опрашивал бы кнопки каждые 100мс запоминал бы эти биты а потом строил бы условия с этими сохранёнными битами без опаски их изменения из-за дребезга. А каждый пятый или второй опрос выполнял бы действие соответствующее функции кнопки.
На каждую кнопку заведи циклический счётчик с периодом счёта 5 к примеру. Кнопка не нажата - сответствующий счётчик принудительно устанавливается в ноль. Иначе - считает в "+" в цикле самого опроса, когда он равен "1" -делаем соответствующее действие, иначе прокручиваемся дальше.
И никаких дополнитеьных действий по устранению дребезга не нужно - сам опрос с сохранением значения с интервалом 100мс гарантирует отсутствие влияния дребезга на результат.
Можно опрашивать с интервалом в 50мс и считать до 10...
раз уж использовать задержку, то я бы просто опрашивал бы кнопки каждые 100мс запоминал бы эти биты а потом строил бы условия с этими сохранёнными битами без опаски их изменения из-за дребезга. А каждый пятый или второй опрос выполнял бы действие соответствующее функции кнопки.
На каждую кнопку заведи циклический счётчик с периодом счёта 5 к примеру. Кнопка не нажата - сответствующий счётчик принудительно устанавливается в ноль. Иначе - считает в "+" в цикле самого опроса, когда он равен "1" -делаем соответствующее действие, иначе прокручиваемся дальше.
И никаких дополнитеьных действий по устранению дребезга не нужно - сам опрос с сохранением значения с интервалом 100мс гарантирует отсутствие влияния дребезга на результат.
Можно опрашивать с интервалом в 50мс и считать до 10...
-
infinity19891
- Встал на лапы
- Сообщения: 141
- Зарегистрирован: Вс дек 18, 2011 10:26:43
- Откуда: Пинск
Re: Обработка нажатия кнопки в AVR...
Всем привет. Такой вопрос: пишу программу для устройства в AVR Studio 4, на Си. Нужно сделать так, чтобы после включения можно было включить один из 4-х режимов работы отдельной кнопкой, при этом 5-я кнопка должна останавливать работу в этом режиме и возвращать устройство в исходное состояние. И вот проблема: как реализовать это программно? Помогите кто может... Исходники прикрепляю.
Re: Обработка нажатия кнопки в AVR...
infinity19891 писал(а):Всем привет. Такой вопрос: пишу программу для устройства в AVR Studio 4, на Си. Нужно сделать так, чтобы после включения можно было включить один из 4-х режимов работы отдельной кнопкой, при этом 5-я кнопка должна останавливать работу в этом режиме и возвращать устройство в исходное состояние. И вот проблема: как реализовать это программно? Помогите кто может... Исходники прикрепляю.
Так кнопок 5 или 2?
-
infinity19891
- Встал на лапы
- Сообщения: 141
- Зарегистрирован: Вс дек 18, 2011 10:26:43
- Откуда: Пинск
Re: Обработка нажатия кнопки в AVR...
Так кнопок 5 или 2?
5 кнопок. 1 - режим 1, 2 - режим 2, 3 - режим 3, 4 - режим 4, 5 - отмена и сброс. Вообще, думал сначала сделать это в виде меню на 4 кнопках, но 3 года не писал ничего, многое подзабыл.
- Zhuk72
- Сверлит текстолит когтями
- Сообщения: 1231
- Зарегистрирован: Ср янв 29, 2014 08:41:31
- Откуда: Баку
- Контактная информация:
Re: Обработка нажатия кнопки в AVR...
При наличии индикации можно вообще на одной кнопке сделать.
Короткое нажатие перебирает режимы по одному, удержание в нажатом состоянии (>1c) возвращает в начальное состояние.
Короткое нажатие перебирает режимы по одному, удержание в нажатом состоянии (>1c) возвращает в начальное состояние.
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Обработка нажатия кнопки в AVR...
infinity19891, а в чём, собссна, проблема то ?
Такую программищу написали, а обычный опрос вывода не можем сделать ? Бред какой-то...
Такую программищу написали, а обычный опрос вывода не можем сделать ? Бред какой-то...

-
infinity19891
- Встал на лапы
- Сообщения: 141
- Зарегистрирован: Вс дек 18, 2011 10:26:43
- Откуда: Пинск
Re: Обработка нажатия кнопки в AVR...
Аlex, в том и проблема, что забыл как кнопки опрашивать.