Как сделать так, чтобы кнопка отправляла только один вход источнику при нажатии и не отправляла еще один, пока кнопка не отпущена и не нажата?

В базовой переменной и установке кнопок в программном обеспечении Arduino идея заключается в том, что если вы нажмете кнопку, вы получите одну из переменных. Теоретически, удержание кнопки не должно приводить к увеличению переменной более чем на единицу до отпускания и повторного нажатия кнопки. Однако я не мог этого сделать. Как это должно быть сделано?

Я попытался использовать else с задержкой (потому что добавление единицы к коду переменной было внутри инструкции «if»), поэтому она не задерживалась, если кнопка и не отпущена, и не считала несколько входов кнопки, но это привело к большему увеличению когда была нажата кнопка, а не только одно увеличение.

const int buttonPin = 8;
int number = 0;
int numbertwo = 0;
int buttonState = 0;

void setup()
{
    pinMode(buttonPin, INPUT);
}

void loop()
{
  buttonState = digitalRead(buttonPin);
  if (buttonState == LOW){
    numbertwo = ++number;
  delay(100);
}

(Можно использовать любой метод для определения переменной, как на ЖК-дисплее)

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

Всего 1 ответ


Я предполагаю, что вы хотите, чтобы переменная "число" увеличивалась на 1 за нажатие. Я думаю, что вы ищете что-то вроде этого:

const int buttonPin = 8;
int number = 0;
int buttonState = 0;
void setup() {
  pinMode(buttonPin, INPUT);
}
void loop()
{
  buttonState = digitalRead(buttonPin);
  if (buttonState == LOW){
    ++number;

    // This loop is to make sure not to count up until button is released
    do {
      buttonState = digitalRead(buttonPin);
    } while (buttonState == LOW);
  }
}

Если вам не нравится реализация на основе цикла, вот реализация на основе состояния для вас:

const int buttonPin = 8;
int number = 0;
int buttonState = 0;
int prevState = -1;
void setup() {
  pinMode(buttonPin, INPUT);
  prevState = -1;
}
void loop()
{
  buttonState = digitalRead(buttonPin);
  if (buttonState == LOW && prevState != buttonState){
    ++number;
    prevState = buttonState;
  }
}

Есть идеи?

10000