Состояние кнопки меняется, несмотря на отсутствие подключения?

Я написал код для проверки кнопок, которые хочу использовать

const int buttonPin1 = 1;
const int buttonPin2 = 2;
const int buttonPin3 = 3;
const int buttonPin4 = 4;
const int buttonPin5 = 5;
const int buttonPin6 = 6;

int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
int buttonState4 = 0;
int buttonState5 = 0;
int buttonState6 = 0;

void setup() {
  Serial.begin(9600);
  pinMode(buttonPin1, INPUT_PULLUP);
  pinMode(buttonPin2, INPUT_PULLUP);
  pinMode(buttonPin3, INPUT_PULLUP);
  pinMode(buttonPin4, INPUT_PULLUP);
  pinMode(buttonPin5, INPUT_PULLUP);
  pinMode(buttonPin6, INPUT_PULLUP);
}

void loop() {
  buttonState1 = digitalRead(buttonPin1);
  buttonState2 = digitalRead(buttonPin2);
  buttonState3 = digitalRead(buttonPin3);
  buttonState4 = digitalRead(buttonPin4);
  buttonState5 = digitalRead(buttonPin5);
  buttonState6 = digitalRead(buttonPin6);

  if (buttonState1 == HIGH) {
    Serial.println("button1 press");
  }
  if (buttonState2 == HIGH){
    Serial.println("button2 press");
  }
  else if (buttonState3 == HIGH){
    Serial.println("button3 press");
  }
  else if (buttonState4 == HIGH){
    Serial.println("button4 press");
  }
  else if (buttonState5 == HIGH){
    Serial.println("button5 press");
  }
  else if (buttonState6 == HIGH){
    Serial.println("button6 press");
  }
  else{

  }
}

Я также пробовал использовать кнопки ButtonPins в виде A0-A5, и всякий раз, когда я пытаюсь запустить код, он всегда выдает спам, что кнопка 5 и кнопка 2 нажаты, несмотря на то, что я их не нажимаю, а также когда я убери кнопки целиком, и выдерни из него все провода, он все равно печатает. Даже когда я повторно запускаю код. Как я могу это исправить?

, 👍0

Обсуждение

Да? Этого и следовало ожидать. Подсказка находится в режиме вывода.... INPUT_PULL**UP** — и вы проверяете, имеет ли он значение **HIGH**. Видите корреляцию?, @Majenko

как ты подключил кнопки?, @Juraj

@Маженко, о, понятно, так это когда я его выпущу? Что объясняет его., @Ola Kveli


2 ответа


3

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

Чтобы это исправить, вам нужно сравнить состояние кнопки с НИЗКИМ. Также убедитесь, что одна сторона кнопок подключена к земле. Затем нажатие кнопки подключит кнопку к земле и переведет вывод кнопки в НИЗКИЙ уровень.

,

0

Ответ в том, как вы настроили кнопки. Поскольку вы использовали INPUT_PULLUP, Arduino будет считывать контакт как HIGH, когда он подключен к земле.

Чтобы использовать это в вашей настройке, кнопки должны быть подключены к земле, а не к 5 В. Таким образом, когда кнопка нажата, входной контакт подключается к земле, в результате чего на нем отображается HIGH.

Другой способ решить проблему — оставить кнопки подключенными к 5 В и просто установить для контактов кнопок обычный вход: pinMode(buttonPin, INPUT);


В целом, есть два решения: либо подключите кнопки между входными контактами и землей, а не 5 В ИЛИ используйте pinMode(buttonPin, INPUT);.. р>

,