Прощу помочь наладить многозадачное управление кнопкой.

Shatun_26
Offline
Зарегистрирован: 24.06.2020

Добрый вечер!
Пытаюсь реализовать многозадачное управление кнопкой( двойной клик, тройной, удержание, счетчик нажатий, и тп.), на данный момент у меня есть программа которая позволяет мне определить двойное нажатие.
Вопрос: как мне регистрировать одиночный клик?

В дальнейшем я хочу завернуть все это в свою библиотеку, наподобие того что есть у Гайвера.

Кроме него ничего в интернетах подобного не нашел, а в коде его библиотеки не могу разобраться.  

#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;
}

 

Клапауций 12345
Offline
Зарегистрирован: 17.05.2020

шо за нах - Гайвер?

Shatun_26
Offline
Зарегистрирован: 24.06.2020

Алекс Гайвер, глянь на ютубе

Клапауций 12345
Offline
Зарегистрирован: 17.05.2020

Shatun_26 пишет:

Алекс Гайвер, глянь на ютубе


мне не на сиськи его смотреть нужно, а на код, который он написал - ты бы ещё инстаграмм или порнхаб этого Гайвера мне дал.

попытка номер "два" - где можно посмотреть код Гайвера без сисек Гайвера?

Shatun_26
Offline
Зарегистрирован: 24.06.2020
Клапауций 12345
Offline
Зарегистрирован: 17.05.2020


ок.
теперь тебе нужно зарегиться на гитхабе и спросить этого Гайвера: шо за нах? как тебе... что? да - один клик.
https://github.com/AlexGyver/GyverLibs/issues

b707
Offline
Зарегистрирован: 26.05.2017

Шатун26 - если ещё не поняли, с либами гайвера - на его форум, здесь их никто обсуждать не станет.
Впрочем, там тоже ...

Shatun_26
Offline
Зарегистрирован: 24.06.2020

Почему я должен спрашивать его?

Код я этот писал сам, и к Гайверу он никакого отношения не имеет.

 

 

sadman41
Offline
Зарегистрирован: 19.10.2016

На форуме уже есть одна большая старая холиварная тема по кнопкам и одна малая. Ещё и в третьей всё заново молоть - увольте.

kalapanga
Offline
Зарегистрирован: 23.10.2016

Shatun_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

Shatun_26
Offline
Зарегистрирован: 24.06.2020

Окей, понял.

Shatun_26
Offline
Зарегистрирован: 24.06.2020

Спасибо;