Кнопка не нажата, но продолжает печатать или вводить 1/HIGH
У меня есть код Arduino, который выводит 1 в последовательный монитор и даже выводит две единицы. Я даже не нажимал и не щелкал кнопку, но она уже установлена в состояние HIGH и даже активируется в этом состоянии 2 раза за цикл.
/* C++ code */
int MODE = 0;
void setup()
{
Serial.begin(9600);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(7, INPUT);
}
void loop()
{
int isPushed = digitalRead(7);
if (isPushed == HIGH) {
Serial.println(digitalRead(7));
if (MODE == 0) {
MODE = 1;
} else if (MODE == 1) {
MODE = 0;
}
}
if (MODE == 0) {
redGreenBlue();
} else if (MODE == 1) {
blink();
}
}
void redGreenBlue(){
digitalWrite(2, HIGH);
delay(200);
digitalWrite(2, LOW);
delay(200);
digitalWrite(3, HIGH);
delay(200);
digitalWrite(3, LOW);
delay(200);
digitalWrite(4, HIGH);
delay(200);
digitalWrite(4, LOW);
delay(200);
}
void blink(){
//Serial.println("working");
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
delay(200);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
delay(200);
}
Предполагалось, что это будет светодиодный переключатель, меняющий цвет с синего, зеленого и красного на белый при нажатии кнопки
@Noli Fin, 👍1
Обсуждение1 ответ
Вам понадобится подтягивающий резистор, чтобы избежать наводок, приводящих к ложным показаниям. Вам также потребуется задержка с момента первого обнаружения изменения на этом контакте, чтобы кнопка успокоилась (поищите «дребезг контактов»), прежде чем вы отреагируете на изменение её состояния (попробуйте 50 мс для начала). В противном случае ваш код будет сталкиваться с множеством быстрых изменений, известных как «дребезг контактов» или «вибрация», и вы снова увидите странное поведение кода. Существуют и другие способы борьбы с дребезгом контактов, но задержка — самый простой.
- Как использовать SPI на Arduino?
- Библиотека DHT.h не импортируется
- Светодиоды: разница между общим анодом и общим катодом
- Как повторить кусок кода
- Как работают прерывания на Arduino Uno и аналогичных платах?
- Почему эта программа на C++ не может прочитать Serial.write() моего arduino?
- Отображение двоичных данных на светодиодах
- Как изменить переменную при нажатии кнопки, подключенной к контакту 2
исследование
плавающего ввода, @jsotolaПохоже, на этом цифровом входе есть какой-то аппаратный шум. Вы добавили какую-нибудь схему подтягивания к этому выводу, чтобы при подаче питания на аппаратное обеспечение сигнал от оборудования на выводе был низким, а при нажатии кнопки вывод N перешёл в активное высокое состояние?, @Vaibhav