Обработка нажатия кнопки в AVR...

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
tantrum
Мучитель микросхем
Сообщения: 447
Зарегистрирован: Сб фев 09, 2013 11:39:13
Откуда: Украина, Марганец

Re: Обработка нажатия кнопки в AVR...

Сообщение tantrum »

Потому что я не могу понять, как можно добавить тикающий таймер в обработчик нажатия кнопки... :(
Аватара пользователя
shads
Опытный кот
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Re: Обработка нажатия кнопки в AVR...

Сообщение shads »

tantrum писал(а):Как сделать так, чтобы, например, при удерживании кнопки в течении 3х секунд, выполнялся иной участок кода, чем просто при кратковременном нажатии?

http://asis-kbr.ru/forum/viewtopic.php?f=13&t=173
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Обработка нажатия кнопки в AVR...

Сообщение Alexeyslav »

Кнопка ведь опрашивается по таймеру? тогда просто считаем нужное количество опросов когда кнопка нажата непрерывно и достигнув некоторого значения считаем что кнопка нажата более 3-х секунд.
Простой рассчет: если кнопку опрашиваем каждые 10мс, то для 3 секунд надо чтобы она была нажата на протяжении 3000мс/10мс = 300 опросов.
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Re: Обработка нажатия кнопки в AVR...

Сообщение pokk »

А мне вот такой вариант больше понравился.
Авто повтор это и есть длительное нажатие.
http://www.kit-e.ru/articles/circuit/2007_08_170.php
Аватара пользователя
tantrum
Мучитель микросхем
Сообщения: 447
Зарегистрирован: Сб фев 09, 2013 11:39:13
Откуда: Украина, Марганец

Re: Обработка нажатия кнопки в AVR...

Сообщение tantrum »

Аватара пользователя
rxstart1
Вымогатель припоя
Сообщения: 508
Зарегистрирован: Пт фев 22, 2013 18:00:43
Откуда: Беларусь, г. Гомель

Re: Обработка нажатия кнопки в AVR...

Сообщение rxstart1 »

А если так, заводим переменную 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...

Сообщение tantrum »

На языке Си можно, пожалуйста?
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Обработка нажатия кнопки в AVR...

Сообщение Аlex »

Причём тут язык ? Вам уже всё разжевали (описали алгоритм), осталось только "в рот положить". Что ещё нужно ?
Если уж Вы так хорошо знаете Си, что просите конкретно для него, то перевести на него с человеческого не составит Вам никакого труда.
Аватара пользователя
tantrum
Мучитель микросхем
Сообщения: 447
Зарегистрирован: Сб фев 09, 2013 11:39:13
Откуда: Украина, Марганец

Re: Обработка нажатия кнопки в AVR...

Сообщение tantrum »

Алгоритм ясен и так...
Я не знаю, как это программно реализуется
Аватара пользователя
Mishany
Электрический кот
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Re: Обработка нажатия кнопки в AVR...

Сообщение Mishany »

вот тут на си и короткое и длинное нажатие есть в отдельной функции....
архивчик ну и как это выглядит видео работы
Аватара пользователя
fox15
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Вс май 24, 2009 22:25:36
Откуда: Russia
Контактная информация:

Re: Обработка нажатия кнопки в AVR...

Сообщение fox15 »

Господа Коты!
С добрым Мяу!

Я тут мимо пробегал (ну так за рыбой :hunger: ), дай думаю зайду, увидел обсуждение по поводу кнопок, дребезга, нажатий.

Скажите ка, тема еще открыта?

Если еще нужно, могу выложить свой алгоритм.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Обработка нажатия кнопки в AVR...

Сообщение Аlex »

Вот тема по кнопкам - viewtopic.php?f=61&t=79801 Можете туда выкладывать.
Аватара пользователя
postal2201
Нашел транзистор. Понюхал.
Сообщения: 164
Зарегистрирован: Чт янв 17, 2013 20:28:05

Re: Обработка нажатия кнопки в AVR...

Сообщение 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 то уменьшаем
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Обработка нажатия кнопки в AVR...

Сообщение Alexeyslav »

ужас ужас ужас. Да оно у тебя при нажатии на кнопку вжииик за 1 секунду 50 пунктов уйдёт.

раз уж использовать задержку, то я бы просто опрашивал бы кнопки каждые 100мс запоминал бы эти биты а потом строил бы условия с этими сохранёнными битами без опаски их изменения из-за дребезга. А каждый пятый или второй опрос выполнял бы действие соответствующее функции кнопки.
На каждую кнопку заведи циклический счётчик с периодом счёта 5 к примеру. Кнопка не нажата - сответствующий счётчик принудительно устанавливается в ноль. Иначе - считает в "+" в цикле самого опроса, когда он равен "1" -делаем соответствующее действие, иначе прокручиваемся дальше.
И никаких дополнитеьных действий по устранению дребезга не нужно - сам опрос с сохранением значения с интервалом 100мс гарантирует отсутствие влияния дребезга на результат.

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

Re: Обработка нажатия кнопки в AVR...

Сообщение infinity19891 »

Всем привет. Такой вопрос: пишу программу для устройства в AVR Studio 4, на Си. Нужно сделать так, чтобы после включения можно было включить один из 4-х режимов работы отдельной кнопкой, при этом 5-я кнопка должна останавливать работу в этом режиме и возвращать устройство в исходное состояние. И вот проблема: как реализовать это программно? Помогите кто может... Исходники прикрепляю.
stend.zip
(5.67 КБ) 616 скачиваний
AR_AROV
Открыл глаза
Сообщения: 59
Зарегистрирован: Сб янв 14, 2012 11:05:46

Re: Обработка нажатия кнопки в AVR...

Сообщение AR_AROV »

infinity19891 писал(а):Всем привет. Такой вопрос: пишу программу для устройства в AVR Studio 4, на Си. Нужно сделать так, чтобы после включения можно было включить один из 4-х режимов работы отдельной кнопкой, при этом 5-я кнопка должна останавливать работу в этом режиме и возвращать устройство в исходное состояние. И вот проблема: как реализовать это программно? Помогите кто может... Исходники прикрепляю.
stend.zip

Так кнопок 5 или 2?
infinity19891
Встал на лапы
Сообщения: 141
Зарегистрирован: Вс дек 18, 2011 10:26:43
Откуда: Пинск

Re: Обработка нажатия кнопки в AVR...

Сообщение infinity19891 »

Так кнопок 5 или 2?

5 кнопок. 1 - режим 1, 2 - режим 2, 3 - режим 3, 4 - режим 4, 5 - отмена и сброс. Вообще, думал сначала сделать это в виде меню на 4 кнопках, но 3 года не писал ничего, многое подзабыл.
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: Обработка нажатия кнопки в AVR...

Сообщение Zhuk72 »

При наличии индикации можно вообще на одной кнопке сделать.
Короткое нажатие перебирает режимы по одному, удержание в нажатом состоянии (>1c) возвращает в начальное состояние.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Обработка нажатия кнопки в AVR...

Сообщение Аlex »

infinity19891, а в чём, собссна, проблема то ?
Такую программищу написали, а обычный опрос вывода не можем сделать ? Бред какой-то... :dont_know:
infinity19891
Встал на лапы
Сообщения: 141
Зарегистрирован: Вс дек 18, 2011 10:26:43
Откуда: Пинск

Re: Обработка нажатия кнопки в AVR...

Сообщение infinity19891 »

Аlex, в том и проблема, что забыл как кнопки опрашивать.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»