Как сделать так, чтобы кнопка отправляла только один вход источнику при нажатии и не отправляла еще один, пока кнопка не отпущена и не нажата? - PullRequest
2 голосов
/ 18 мая 2019

В базовой переменной и установке кнопок в программном обеспечении 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 Ответ

0 голосов
/ 18 мая 2019

Я предполагаю, что вы хотите, чтобы переменная "число" увеличивалась на 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 {
      delay(5);
      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;
  }
  delay(5);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...