digitalRead продолжает давать 1
Я новичок в программировании Arduino и несколько дней назад купил Arduino UNO.
Я пытаюсь прочитать значение контакта 4, используя digitalRead
с pinMode INPUT_PULLUP, но он продолжает выдавать мне 1, даже когда контакт 4 ни к чему не подключен.
Вот код:
void setup() {
pinMode(2,OUTPUT);
pinMode(4,INPUT_PULLUP);
Serial.begin(9600);
digitalWrite(2,HIGH);
}
void loop() {
Serial.print(digitalRead(4));
Serial.print('\n');
delay(150);
}
Контакт 2 подключается к одной стороне кнопки, а контакт 4 — к другой стороне кнопки. В соответствии с условием, когда кнопка должна быть выключена, значение должно быть 0, а когда кнопка должна быть включена, значение должно быть 1, но значение равно 1, даже когда я нажимаю кнопку выключено или включено.
С другой стороны, если я заменю INPUT_PULLUP
на INPUT
, значение будет плавающим.
Почему значение INPUT_PULLUP равно 1?
@Black Thunder, 👍1
Обсуждение3 ответа
Лучший ответ:
Вы установили для контакта 2 значение HIGH
, что составляет 5 В. Вы установили для контакта 4 значение INPUT_PULLUP
, что означает, что если на него не подается сигнал, он будет HIGH
.
Вы подключили кнопку между контактами 2 и 4. Таким образом, если вы не нажмете кнопку, вход будет HIGH
. И если вы все же нажмете кнопку, контакт 2 активирует ее HIGH
.
@J.Doe: Стандартный способ подключения кнопки - подключить ее между цифровым входом и землей. Если вы установите цифровой вход в режим «INPUT_PULLUP», на выводе будет отображаться «LOW», когда кнопка нажата, и «HIGH», когда она не нажата., @Edgar Bonet
Похоже, он работает как проводной и запрограммированный. Когда кнопка открыта, INPUT_PULLUP подтягивает контакт 4 к HIGH, а когда кнопка закрыта & замкнут на контакт 2, digitalWrite(2,HIGH)
также переводит контакт 4 в состояние HIGH.
Возможно, вы хотите использовать digitalWrite(2,LOW)
, чтобы при подключении контактов 4 к контактам 2 через кнопку на контакте 4 был низкий уровень.
Но тогда нет смысла использовать контакт 2 вместо GND., @Edgar Bonet
Я не знаю, почему Доу сделал это, но он делал это неправильно. Иногда я подаю питание или заземляю через выходные контакты, чтобы я мог подключить устройство непосредственно к разъему, или чтобы я мог включить или выключить устройство, но это своего рода небрежный, дешевый хак., @Dave X
«digitalWrite» здесь было написано с ошибкой как «digitalWtite». Не знаю, почему его откатили., @Pikamander2
@Pikamander2 Крошечные, тривиальные правки не приветствуются, и вы добавили  
в конце. https://arduino.stackexchange.com/help/привилегии/изменить, @Juraj
Есть простые варианты, как подключить простую кнопку. Вы перепутали их.
Лучше подключить кнопку между выводом INPUT_PULLUP и землей. Контакт имеет ВЫСОКИЙ уровень, когда кнопка открыта, и НИЗКИЙ уровень, когда кнопка заземляет контакт. Этот вариант лучше, потому что, если вы отсоедините кнопку, штифт по-прежнему будет подтягиваться к ВЫСОКОМУ ВЫСОКОМУ уровню, а не плавающему.
Если вы соедините кнопку с раскрывающейся схемой, тогда контакт будет ВЫСОКИМ, когда кнопка нажат и НИЗКИЙ, когда кнопка разомкнута, но когда вы отключаете цепь, штифт плавает, и скетч читается как хаос.
- Невозможно использовать аналоговые контакты в качестве цифровых входов
- Включить реле на некоторое время непрерывным входом
- Есть ли способ воспроизводить звуки с Arduino без использования звукового экрана?
- В чем разница между analogWrite и digitalWrite?
- Чтение из Serial
- Что означает “LSB на градус в секунду” (LSB per degree per second)?
- Как настроить ADC7 на Arduino Pro Mini в качестве цифрового выхода?
- Чтение частоты ввода в цифровых выводах
«_когда кнопка должна быть выключена, значение должно быть 0_»: что привело вас к такому предположению?, @Edgar Bonet