Контакты 2 и 3 должны быть соединены?

Я играл с рекламой Arduino и понял, что контакты 2 и 3 каким-то образом связаны. Когда я нажимаю кнопку для контакта 2, для контакта 2 и контакта 3 устанавливается ВЫСОКИЙ уровень, хотя к контакту 3 ничего не подключено. Код, который у меня есть, настроен для контакта 2 и ничего не упоминает о контакте 3, но если я изменю аппаратное обеспечение для подключения его к контакту 3, оно ведет себя так же, как контакт 2. Ни один из других контактов этого не делает. Так и должно быть или что-то не так?

int switchState = 0;

const int led1 = 12;
const int led2 = 8;
const int led3 = 3;
const int button = 2;

void setup() {
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(button, INPUT);
}

void loop() {
  switchState = digitalRead(button);
  if(switchState == HIGH){
    digitalWrite(led3, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led1, HIGH);
    delay(500);
    digitalWrite(led3, LOW);
    digitalWrite(led2, HIGH);
    digitalWrite(led1, LOW);
    delay(500);
  }
  else{
    digitalWrite(led3, HIGH);
    digitalWrite(led2, LOW);
    digitalWrite(led1, LOW);
  }
}

, 👍1

Обсуждение

Добро пожаловать в Arduino:SE. Если вы отредактируете свой вопрос, включив в него свой код, это может помочь людям понять, что не так., @sempaiscuba

даже если к контакту 3 ничего не подключено - узнайте, что такое "плавающий вход"..., @Majenko

У вас есть подтягивающее или опускающее устройство, подключенное к контакту кнопки?, @Gerben


2 ответа


1

Вход, который ни к чему не подключен, «плавает». Это даст вам непредсказуемые значения. На это могут влиять близлежащие контакты. Вероятно, это то, что вы видите. (Металлические дорожки двух контактов, вероятно, расположены рядом друг с другом на плате Arduino.)

Вам следует либо заземлить вход с помощью резистора, либо подключить его к +5 В с помощью резистора, либо использовать режим INPUT_PULLUP, который привязывает его к внутреннему подтягивающему резистору. Любая из этих вещей не позволит входным данным «прыгать» и давать непредсказуемые результаты.

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

,

0

Вы можете использовать это:

pinMode(button,INPUT_PULLUP);
,