Состояние кнопки меняется, несмотря на отсутствие подключения?
Я написал код для проверки кнопок, которые хочу использовать
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 нажаты, несмотря на то, что я их не нажимаю, а также когда я убери кнопки целиком, и выдерни из него все провода, он все равно печатает. Даже когда я повторно запускаю код. Как я могу это исправить?
@Ola Kveli, 👍0
Обсуждение2 ответа
Вы устанавливаете контакты кнопки в режиме INPUT_PULLUP, который активирует внутренний резистор, подключенный к напряжению питания. Таким образом, ваши входные контакты находятся в состоянии ВЫСОКИЙ, если они отключены или кнопка не нажата.
Чтобы это исправить, вам нужно сравнить состояние кнопки с НИЗКИМ. Также убедитесь, что одна сторона кнопок подключена к земле. Затем нажатие кнопки подключит кнопку к земле и переведет вывод кнопки в НИЗКИЙ уровень.
Ответ в том, как вы настроили кнопки. Поскольку вы использовали INPUT_PULLUP
, Arduino будет считывать контакт как HIGH
, когда он подключен к земле.
Чтобы использовать это в вашей настройке, кнопки должны быть подключены к земле, а не к 5 В. Таким образом, когда кнопка нажата, входной контакт подключается к земле, в результате чего на нем отображается HIGH
.
Другой способ решить проблему — оставить кнопки подключенными к 5 В и просто установить для контактов кнопок обычный вход: pinMode(buttonPin, INPUT);
В целом, есть два решения: либо подключите кнопки между входными контактами и землей, а не 5 В ИЛИ используйте pinMode(buttonPin, INPUT);
.. р>
- Определения целочисленных массивов: длина
- Считывание данных нескольких датчиков из текстового файла, расположенного на SD-карте в Arduino/ESP32
- Проблемы с IP-адресом esp8266
- Проблемы с Serial.read()
- Arduino ждет, пока кнопка не будет отпущена для активации
- Int массив, переданный через функцию, имеет неправильные значения только после нескольких проходов
- Проблема не сохранения предыдущего значения при отправке по блютусу
- avrdude ser_open() can't set com-state
Да? Этого и следовало ожидать. Подсказка находится в режиме вывода.... INPUT_PULL**UP** — и вы проверяете, имеет ли он значение **HIGH**. Видите корреляцию?, @Majenko
как ты подключил кнопки?, @Juraj
@Маженко, о, понятно, так это когда я его выпущу? Что объясняет его., @Ola Kveli