Как предотвратить увеличение счетчика при удержании кнопки

Я новичок и тоже новичок. Пожалуйста, помогите этому бедному мальчику. Я ищу способ увеличить переменную на единицу при каждом нажатии кнопки. Текущий подход следующий:

void buttonLoop() {
  int win = 0;
  while (win ==0) {
  display.setCursor(0, 0);
  // Функцию getButtons() можно использовать для проверки нажатия какой-либо кнопки или использовать ее следующим образом:
  //getButtons(TSButtonUpperLeft) для проверки конкретной кнопки или даже так:
  //getButtons(TSButtonUpperLeft|TSButtonUpperRight) для проверки нескольких кнопок
  //результаты переворачиваются, как и следовало ожидать, когда setFlip(true)
  if (display.getButtons(TSButtonUpperLeft)) {
    display.println("Pressed!");
    score++;
    updateScore();
  } else {
    display.println("          ");
  }
  display.setCursor(0, 54);
  if (display.getButtons(TSButtonLowerLeft)) {
    display.println("Pressed!");
    score++;
    updateScore();
  } else {
    display.println("          ");
  }
  display.setCursor(95 - display.getPrintWidth("Pressed!"), 0);
  if (display.getButtons(TSButtonUpperRight)) {
    display.println("Pressed!");
    score++;
    updateScore();
  } else {
    display.println("          ");
  }
  display.setCursor(95 - display.getPrintWidth("Pressed!"), 54);
  if (display.getButtons(TSButtonLowerRight)) {
    display.println("Pressed!");
    score++;
    updateScore();
  } else {
    display.println("          ");
  }
}
}

В моем случае счетчик будет увеличиваться, если я не отпущу кнопку. Как мне сделать так, чтобы счетчик увеличивался только на 1, даже если я продолжаю удерживать кнопку.

Спасибо всем добрым душам в этом обществе :)

, 👍-1

Обсуждение

Найдите библиотеку Bounce2 в диспетчере библиотек IDE., @VE7JRO

проверьте, была ли кнопка отпущена, прежде чем разрешить счетчику снова увеличиваться, @jsotola


1 ответ


0

Посмотрите мой ответ в этой теме:

Как подключить кнопку Big Dome Button к Arduino

В этом треде объясняется, как подключить переключатель и написать код, увеличивающий значение счетчика при каждом нажатии кнопки.

Что вам важно:

Подключите один провод переключателя к цифровому входу, а другой к земле.

Затем установите контакт переключателя в режим INPUT_PULLUP. Теперь ваш переключатель будет отображаться как ВЫСОКИЙ, пока он не будет нажат, затем он будет отображаться как НИЗКИЙ.

создайте переменную в верхней части кода с именем buttonState:

byte buttonState = HIGH;

Также определите беззнаковую длинную переменную nextReadMillis:

unsigned long nextReadMillis = 0;

и переменная pressCount:

unsigned int pressCount = 0;

И определите debounceTime:

#define debounceTime 50

В своем цикле сделайте что-то вроде этого:

void loop() {
    //Получить новый millis(значение)
    unsigned long newMillis = millis();

    // смотрим на новое значение кнопки, только если прошло достаточно времени.
    if (newMillis >= nextReadMillis) {
       byte newButtonState = digitalRead(buttonPin);

       // Делать что-то, только если состояние кнопки изменилось
       if (buttonState != newButtonState) {
          buttonState = newButtonState;
          nextReadMillis = newMillis + debounceTime;
          //Если кнопка сейчас находится в нажатом (LOW) состоянии, увеличиваем счетчик
          if (buttonState == LOW) {
              pressCount++;
          }
       }
    }
}

Это псевдокод. Вероятно, в нем есть синтаксические ошибки. Это не предназначено для копирования/вставки. Используйте его в качестве руководства для вашего проекта.

Код, использующий millis(), представляет собой вариант «программного подавления дребезга». Электрические переключатели имеют тенденцию очень быстро «дрожать» или «прыгать» между включенным и выключенным состояниями при первом нажатии / отпускании. Проверяя изменения состояния только после небольшой задержки, вы игнорируете дрожание показаний.

Вы можете немного увеличить или уменьшить значение параметра debounceTime. Значение 50 — это 1/20 секунды, что должно сделать ваши нажатия кнопок достаточно чувствительными, но при этом хорошо устранять дребезг переключателя. Если вы обнаружите, что ваш счет иногда увеличивается более чем на единицу при нажатии кнопки, вы можете увеличить значение до 100 или даже 500, хотя при 500 (1/2 секунды) кнопка не будет реагировать на очень быстрые нажатия

,