Прощу помочь наладить многозадачное управление кнопкой.
- Войдите на сайт для отправки комментариев
Ср, 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
Окей, понял.
Спасибо;