Прощу помочь наладить многозадачное управление кнопкой.
- Войдите на сайт для отправки комментариев
Ср, 24/06/2020 - 20:50
Добрый вечер!
Пытаюсь реализовать многозадачное управление кнопкой( двойной клик, тройной, удержание, счетчик нажатий, и тп.), на данный момент у меня есть программа которая позволяет мне определить двойное нажатие.
Вопрос: как мне регистрировать одиночный клик?
В дальнейшем я хочу завернуть все это в свою библиотеку, наподобие того что есть у Гайвера.
Кроме него ничего в интернетах подобного не нашел, а в коде его библиотеки не могу разобраться.
#define BUTTON_PIN 12 boolean flagPress = false; boolean flagClick = false; byte buttonCount = 0; #define TIME_BUTTON 12 //время для устранения дребезга контактов. int time1; // время первого нажатия кнопки int time2; // время второго нажатия кнопки bool count = false; int i = 0; // счетчик нажатий bool button_ex = HIGH; // фронт состояния кнопки long currenttime; long currenttime_1; long looptime_1; long looptime;// время фронта для таймера int timedis = 0; //разница между вторым и первым нажатием bool fordouble; void setup() { pinMode(BUTTON_PIN, INPUT_PULLUP); Serial.begin(9600); } void loop() { // блок таймера (вызывает следующий блок кода каждые 2 мс) currenttime = millis(); if (currenttime >= (looptime + 2)) { looptime = currenttime; // блок возвращающий состояние кнопки ( flagPress,flagClick). // также устраняет дребезг контактов кнопки if ( flagPress == (! digitalRead(BUTTON_PIN)) ) { buttonCount = 0; } else { buttonCount++; if ( buttonCount >= TIME_BUTTON ) { flagPress = ! flagPress; buttonCount = 0; if ( flagPress == true ) flagClick = !flagClick; } } } // блок счетчика нажатий if ((flagPress == true) && (button_ex == LOW)) { i++; // Serial.println(i); } // сбрасывание счетчика нажатий в 0,если время после 1 нажатия превысило 250мс if ((flagPress == true) && (button_ex == LOW)) { currenttime_1 = millis(); if (currenttime_1 >= (looptime_1 + 250)) { looptime_1 = currenttime_1; i = 1; } } // блок фиксации времени 1 нажатия if (i == 1) { if ((flagPress == true) && (button_ex == LOW)) { count = true; if ( count == true) { time1 = millis(); //Serial.println(time1); count = false; } } } // блок фиксации второго нажатия и вычсления разницы во времени между ними if (i == 2) { if ((flagPress == true) && (button_ex == LOW)) { count = true; if ( count == true) { time2 = millis(); count = false; timedis = time2 - time1; // блок условия двойного клика if (timedis < 250) { fordouble = true; } } } } // вывод if (fordouble == true) { Serial.println("double"); fordouble = false; } // обнуление счетчика if (i == 2) { i = 0; } // задание состояния фронта кнопки button_ex = flagPress; }
шо за нах - Гайвер?
Алекс Гайвер, глянь на ютубе
Алекс Гайвер, глянь на ютубе
мне не на сиськи его смотреть нужно, а на код, который он написал - ты бы ещё инстаграмм или порнхаб этого Гайвера мне дал.
попытка номер "два" - где можно посмотреть код Гайвера без сисек Гайвера?
https://github.com/AlexGyver/GyverLibs/tree/master/GyverButton
https://github.com/AlexGyver/GyverLibs/tree/master/GyverButton
ок.
теперь тебе нужно зарегиться на гитхабе и спросить этого Гайвера: шо за нах? как тебе... что? да - один клик.
https://github.com/AlexGyver/GyverLibs/issues
Шатун26 - если ещё не поняли, с либами гайвера - на его форум, здесь их никто обсуждать не станет.
Впрочем, там тоже ...
Почему я должен спрашивать его?
Код я этот писал сам, и к Гайверу он никакого отношения не имеет.
На форуме уже есть одна большая старая холиварная тема по кнопкам и одна малая. Ещё и в третьей всё заново молоть - увольте.
Кроме него ничего в интернетах подобного не нашел
В таких случае говорят, что Вы и порно в интернете найти не сможете! Ну как так то, если только на этом форуме есть как минимум две библиотеки для кнопок. Смотрите, изучайте:
http://arduino.ru/forum/programmirovanie/klass-titanovyi-velosiped-dlya-taktovoi-knopki
http://arduino.ru/forum/programmirovanie/biblioteka-dlya-raboty-s-knopkoi-shbutton
Ну и просто про работу с кнопками тема:
http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-novichku
Окей, понял.
Спасибо;