0 голосов
Допустим, есть переменная t со значением таймера. Кто как отслеживает одиночные, длительные удержания кнопки? А также двойные, тройные... Дребезг контактов опускаем.
(873 баллов) 1 5 23
Дребезг контактов опускаем. То есть предполагается, что проблема дребезга решена аппаратно?
Дребезга нет. Точка.

2 Ответы

0 голосов
Если первое нажатие меньше определённого периода, то считается, что оно не длительное. Далее надо заранее знать время, после которого повторное нажатие кнопки будет считаться, как ещё одно одинарное нажатие. Пока идёт это время относительно первого нажатия, считаем нажатия. Лишь по истечении этого времени можно будет решить сколько нажатий было сделано и обрабатывать события. Лучше конечно на псевдокоде объяснить.
(586 баллов) 1 4 21
–1 голос

Вот псевдокод:
 

int result;

bool stop = 0;
void loop {

bool nopress - digitalRead(Button_pin);

if (!nopress) {

result = 1;

if (!stop) {

for(int time = 0; time < 1000 || stop; time += 10) {

if (!nopress) {

result ++;

stop = 1;

return;

}

delay(10);

}

}

stop = 0;

}


Это скетч на двойное нажатие. Result - это сколько раз нажали.

(7 баллов) 2
исправил назад
Не понятно, как же отследить короткое и длительное нажатие. Мне кажется, что здесь очень хорошо получится на секвенсоре состояний, но это не точно...
Код надо оформлять как код:
4.5. Оформляйте код через сниппеты
Чтобы порции кода в сообщениях были читабельными, пользуйтесь функцией «Вставить сниппет»
Добро пожаловать на Бредборд! Сайт вопросов и ответов на тему Arduino, Raspberry Pi и хоббийной электроники в целом. Цель Бредборда — быть максимально полезным. Поэтому мы строго следим за соблюдением правил, боремся с холиворами и оффтопиком.
  1. parovoZZ

    367 балл(ов)

  2. gokase

    178 балл(ов)

  3. Un_ka

    139 балл(ов)

  4. issaom

    108 балл(ов)

  5. dartWaiter

    37 балл(ов)

  6. smart_pic

    34 балл(ов)

Награды месяца
1-е место: Роторный инструмент Dremel 7750-10
2-е место: Мультиметр Uni-T UT61C
3-е место: Кримпер Pro'sKit 8PK-371D

...