digitalRead продолжает давать 1

digital input

Я новичок в программировании 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?

, 👍1

Обсуждение

«_когда кнопка должна быть выключена, значение должно быть 0_»: что привело вас к такому предположению?, @Edgar Bonet


3 ответа


Лучший ответ:

6

Вы установили для контакта 2 значение HIGH, что составляет 5 В. Вы установили для контакта 4 значение INPUT_PULLUP, что означает, что если на него не подается сигнал, он будет HIGH.

Вы подключили кнопку между контактами 2 и 4. Таким образом, если вы не нажмете кнопку, вход будет HIGH. И если вы все же нажмете кнопку, контакт 2 активирует ее HIGH.

,

@J.Doe: Стандартный способ подключения кнопки - подключить ее между цифровым входом и землей. Если вы установите цифровой вход в режим «INPUT_PULLUP», на выводе будет отображаться «LOW», когда кнопка нажата, и «HIGH», когда она не нажата., @Edgar Bonet


0

Похоже, он работает как проводной и запрограммированный. Когда кнопка открыта, 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 Крошечные, тривиальные правки не приветствуются, и вы добавили &nbsp в конце. https://arduino.stackexchange.com/help/привилегии/изменить, @Juraj


3

Есть простые варианты, как подключить простую кнопку. Вы перепутали их.

Лучше подключить кнопку между выводом INPUT_PULLUP и землей. Контакт имеет ВЫСОКИЙ уровень, когда кнопка открыта, и НИЗКИЙ уровень, когда кнопка заземляет контакт. Этот вариант лучше, потому что, если вы отсоедините кнопку, штифт по-прежнему будет подтягиваться к ВЫСОКОМУ ВЫСОКОМУ уровню, а не плавающему.

Если вы соедините кнопку с раскрывающейся схемой, тогда контакт будет ВЫСОКИМ, когда кнопка нажат и НИЗКИЙ, когда кнопка разомкнута, но когда вы отключаете цепь, штифт плавает, и скетч читается как хаос.

,