Нажатие кнопки с Arduino повторяется много раз

У меня есть 5 В -> кнопка -> резистор 10 кОм -> настройка PIN2 с помощью Arduino UNO.

Мой код очень прост:

int count = 0;

void setup() {
  pinMode(2, INPUT);
  Serial.begin(9600); 
}

void loop() {
  int state = digitalRead(2);
  Serial.println(state);
  if (state == HIGH) {
    count++;
    Serial.print("Hi");
    Serial.println(count);
  }
  delay(1000); 
}

Если кнопка нажата, выведите «HiX», но то, что я получаю, очень странно. Когда я нажимаю кнопку только один раз, я получаю следующее:

0
0
0
0
0
1
Hi1
1
Hi2
1
Hi3
1
Hi4
1
Hi5
1
Hi6
1
Hi7
1
Hi8
1
Hi9
1
Hi10
0

Нажатие кнопки регистрируется 10 раз.

Что я делаю не так?

, 👍1

Обсуждение

Вы нажали ее один раз, но, должно быть, держали ее в течение 10 секунд. Вы получаете «Привет» за каждую итерацию цикла. Если вам нужно только одно сообщение при нажатии, вам нужно запомнить предыдущее состояние переключателя в переменной, а затем сравнить его с текущим состоянием., @Dave Tweed

Используйте одну из библиотек «bounce» для Arduino или напишите что-то подобное, см. https://github.com/thomasfredericks/Bounce2/wiki., @Dejvid_no1

Как сказал Ясу в своем ответе, ваш ввод плавает, когда кнопка не нажата., @Dejvid_no1


1 ответ


1

Думаю, это не проблема отскока... В цикле существует задержка (1000), поэтому через 1 секунду переключатель больше не подпрыгивает. Но переключение на VCC — это проблема. Подключите переключатель к GND и используйте внутренние подтягивающие резисторы (pinMode(2, PULLUP). Затем переключатель тянет его на землю. Теперь он плавает и, вероятно, остается ВЫСОКИМ после размыкания переключателя....

,