Нужна помощь по кнопке

medved820

✩✩✩✩✩✩✩
25 Ноя 2020
10
0
Всем доброго времени суток!
Недавно начал вникать в ардуино и что-то я сильно уперся в казалось бы простецкую проблему. В скетче с библиотекой GyverButton не получается отключать светодиод при одинарном (двойном или тройном) нажатии. Пробовал разные варианты: и флаги и через условия, но ничего не получается. Подскажите, что должно быть после if, или надо по другому делать?

C++:
// Пример использования библиотеки GyverButton, 1- 2- 3- нажатие

#define BTN_PIN 2   // кнопка подключена сюда (BTN_PIN --- КНОПКА --- GND)
#define LED1 6
#define LED2 5
#define LED3 4

#include "GyverButton.h"
GButton butt1(BTN_PIN);

void setup() {
  Serial.begin(9600);
  pinMode(6, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(4, OUTPUT);
}

void loop() {
  butt1.tick();  // обязательная функция отработки. Должна постоянно опрашиваться

  if (butt1.isSingle())
  { digitalWrite(LED1, HIGH); Serial.println("Single");     // проверка на один клик
  }

  if (butt1.isDouble())
  { digitalWrite(LED2, HIGH); Serial.println("Double");     // проверка на двойной клик
  }

  if (butt1.isTriple())
  { digitalWrite(LED3, HIGH);  Serial.println("Triple");     // проверка на тройной клик
  }
}
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,304
949
58
Марий-Эл
не получается отключать светодиод при одинарном (двойном или тройном) нажатии.
Так то в данном примере производится только включение светодиодов.
А выключать Вы их как хотите? По какому условию?
 

medved820

✩✩✩✩✩✩✩
25 Ноя 2020
10
0
Так то в данном примере производится только включение светодиодов.
А выключать Вы их как хотите? По какому условию?
Например при двойном нажатии включили светодиод, а при повторном двойном нажатии выключили
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,304
949
58
Марий-Эл
C++:
// Пример использования библиотеки GyverButton, 1- 2- 3- нажатие

#define BTN_PIN 2   // кнопка подключена сюда (BTN_PIN --- КНОПКА --- GND)
#define LED1 6
#define LED2 5
#define LED3 4

#include "GyverButton.h"
GButton butt1(BTN_PIN);

void setup() {
  Serial.begin(9600);
  pinMode(6, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(4, OUTPUT);
}

void loop() {
  butt1.tick();  // обязательная функция отработки. Должна постоянно опрашиваться

  if (butt1.isSingle())
  { digitalWrite(LED1, HIGH); Serial.println("Single");     // проверка на один клик
  }

  if (butt1.isDouble())
  { digitalWrite(LED1, LOW); Serial.println("Double");     // проверка на двойной клик
  }
}
Попробуйте так.
Но это управление только одним диодом.
А так вариантов 100500
 

medved820

✩✩✩✩✩✩✩
25 Ноя 2020
10
0
В описанном выше варианте включение светодиода от одиночного клика, а отключение от двойного. А нужно чтобы и включение было от двойного, и выключение, тоже от двойного

C++:
 if (butt1.isDouble())
  { digitalWrite(LED2, HIGH); Serial.println("Double");     // проверка на двойной клик
  }

    if (butt1.isDouble())
  { digitalWrite(LED2, LOW); Serial.println("Double");     // проверка на двойной клик
  }
А при таком варианте светодиод кратковременно вспыхивает, но не загорается