Счётчик нажатий и длинное удержание

Короткое нажатие считается, удержание дольше секунды сбрасывает счётчик.

Продвинутый уровень Arduino Uno C++
Схема подключения: Счётчик нажатий и длинное удержание
Схема в симуляторе. Нажмите «Открыть в симуляторе», чтобы запустить её и поменять.

Что понадобится

Как подключить

ОткудаКуда
Arduino UnoD2→Кнопка1.l
Кнопка2.l→Arduino UnoGND
Arduino UnoD8→Резистор1
Резистор2→СветодиодA
СветодиодC→Arduino UnoGND

Скетч

// Считаем нажатия. Держать дольше 1 с — сброс счётчика.
const int BTN = 2;
const int LED = 8;

int count = 0;
bool lastLevel = HIGH;
unsigned long pressedAt = 0;
bool longDone = false;

void setup() {
  pinMode(BTN, INPUT_PULLUP);
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
  Serial.println("Нажимайте кнопку");
}

void loop() {
  bool level = digitalRead(BTN);

  if (lastLevel == HIGH && level == LOW) {   // нажали
    pressedAt = millis();
    longDone = false;
  }

  if (level == LOW && !longDone && millis() - pressedAt > 1000) {
    count = 0;
    longDone = true;
    Serial.println("Сброс");
  }

  if (lastLevel == LOW && level == HIGH) {   // отпустили
    if (!longDone) {
      count++;
      Serial.print("Нажатий: ");
      Serial.println(count);
    }
  }

  lastLevel = level;
  digitalWrite(LED, (count % 2) ? HIGH : LOW);
  delay(20);
}

Коротко о детали: Кнопка

Тактовая кнопка замыкает цепь, пока её держат нажатой. Выводов четыре, но попарно они соединены внутри корпуса, так что независимых контактов всего два. Чтобы вход не ловил наводки, используют подтяжку — INPUT_PULLUP или резистор на питание.

Распиновка и все примеры →

Ещё примеры с деталью «Кнопка»

Попробуйте сами

Симулятор работает прямо в браузере: схему можно менять, код — править, а результат видно сразу. Бесплатно, без установки и регистрации.

Открыть «Счётчик нажатий и длинное удержание» в симуляторе