Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Вс янв 11, 2015 19:17:34
Потому что я не могу понять, как можно добавить тикающий таймер в обработчик нажатия кнопки...
Вс янв 11, 2015 22:23:53
tantrum писал(а):Как сделать так, чтобы, например, при удерживании кнопки в течении 3х секунд, выполнялся иной участок кода, чем просто при кратковременном нажатии?
http://asis-kbr.ru/forum/viewtopic.php?f=13&t=173
Вс янв 11, 2015 23:34:19
Кнопка ведь опрашивается по таймеру? тогда просто считаем нужное количество опросов когда кнопка нажата непрерывно и достигнув некоторого значения считаем что кнопка нажата более 3-х секунд.
Простой рассчет: если кнопку опрашиваем каждые 10мс, то для 3 секунд надо чтобы она была нажата на протяжении 3000мс/10мс = 300 опросов.
Пн янв 12, 2015 11:52:09
А мне вот такой вариант больше понравился.
Авто повтор это и есть длительное нажатие.
http://www.kit-e.ru/articles/circuit/2007_08_170.php
Пн янв 12, 2015 21:10:31
А если так, заводим переменную trig как только кнопка нажата if (!trig) {TCNT=0;count=0;trig=1;} и все в обработчике таймера скажем по совпадению увеличиваем count на 1 итак как только count=6 значит кнопка удерживается 3 сек. Как только кнопка отпущена trig=0;
Пн янв 12, 2015 21:21:07
На языке Си можно, пожалуйста?
Вт янв 13, 2015 08:26:28
Причём тут язык ? Вам уже всё разжевали (описали алгоритм), осталось только "в рот положить". Что ещё нужно ?
Если уж Вы так хорошо знаете Си, что просите конкретно для него, то перевести на него с человеческого не составит Вам никакого труда.
Вт янв 13, 2015 23:28:51
Алгоритм ясен и так...
Я не знаю, как это программно реализуется
Ср янв 14, 2015 05:24:20
вот тут на си и короткое и длинное нажатие есть в отдельной функции....
архивчик ну и как это выглядит
видео работы
Вт апр 14, 2015 00:37:54
Господа Коты!
С добрым Мяу!
Я тут мимо пробегал (ну так за рыбой
), дай думаю зайду, увидел обсуждение по поводу кнопок, дребезга, нажатий.
Скажите ка, тема еще открыта?
Если еще нужно, могу выложить свой алгоритм.
Вт апр 14, 2015 07:36:21
Вот тема по кнопкам -
viewtopic.php?f=61&t=79801 Можете туда выкладывать.
Пт апр 01, 2016 08:46:03
Друзья, только начинаю осваивать Си, так что не судите строго
Помогите разобрать следующий код обрабатывающий кнопки:
Спойлер
- Код:
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 то уменьшаем
Пт апр 01, 2016 18:44:01
ужас ужас ужас. Да оно у тебя при нажатии на кнопку вжииик за 1 секунду 50 пунктов уйдёт.
раз уж использовать задержку, то я бы просто опрашивал бы кнопки каждые 100мс запоминал бы эти биты а потом строил бы условия с этими сохранёнными битами без опаски их изменения из-за дребезга. А каждый пятый или второй опрос выполнял бы действие соответствующее функции кнопки.
На каждую кнопку заведи циклический счётчик с периодом счёта 5 к примеру. Кнопка не нажата - сответствующий счётчик принудительно устанавливается в ноль. Иначе - считает в "+" в цикле самого опроса, когда он равен "1" -делаем соответствующее действие, иначе прокручиваемся дальше.
И никаких дополнитеьных действий по устранению дребезга не нужно - сам опрос с сохранением значения с интервалом 100мс гарантирует отсутствие влияния дребезга на результат.
Можно опрашивать с интервалом в 50мс и считать до 10...
Ср фев 15, 2017 19:02:12
Всем привет. Такой вопрос: пишу программу для устройства в AVR Studio 4, на Си. Нужно сделать так, чтобы после включения можно было включить один из 4-х режимов работы отдельной кнопкой, при этом 5-я кнопка должна останавливать работу в этом режиме и возвращать устройство в исходное состояние. И вот проблема: как реализовать это программно? Помогите кто может... Исходники прикрепляю.
Ср фев 15, 2017 19:08:29
infinity19891 писал(а):Всем привет. Такой вопрос: пишу программу для устройства в AVR Studio 4, на Си. Нужно сделать так, чтобы после включения можно было включить один из 4-х режимов работы отдельной кнопкой, при этом 5-я кнопка должна останавливать работу в этом режиме и возвращать устройство в исходное состояние. И вот проблема: как реализовать это программно? Помогите кто может... Исходники прикрепляю.
stend.zip
Так кнопок 5 или 2?
Ср фев 15, 2017 19:28:07
Так кнопок 5 или 2?
5 кнопок. 1 - режим 1, 2 - режим 2, 3 - режим 3, 4 - режим 4, 5 - отмена и сброс. Вообще, думал сначала сделать это в виде меню на 4 кнопках, но 3 года не писал ничего, многое подзабыл.
Ср фев 15, 2017 19:59:56
При наличии индикации можно вообще на одной кнопке сделать.
Короткое нажатие перебирает режимы по одному, удержание в нажатом состоянии (>1c) возвращает в начальное состояние.
Ср фев 15, 2017 20:02:49
infinity19891, а в чём, собссна, проблема то ?
Такую программищу написали, а обычный опрос вывода не можем сделать ? Бред какой-то...
Чт фев 16, 2017 08:42:28
Аlex, в том и проблема, что забыл как кнопки опрашивать.
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.