Странное поведение Arduino с перемычками

Я использую Arduino Uno и хочу смоделировать кнопку. У меня нет кнопки, поэтому я «построил» ее, подключив провод к Digital3, а другой к GND и нажав их вместе. Чтобы заметить HIGH на Digital3, я подключил светодиод к Digital5.

Когда я подключаю провод GND к проводу Digital3, он работает. Подсказка в том, что если я коснусь пальцем провода digital3 (не сжимая оба провода вместе), светодиод загорится! Провод стандартный изолированный для макетных плат...

Мой код:

 void setup(){
  pinMode(3, INPUT);
  pinMode(5, OUTPUT);
}

void loop(){
  if(digitalRead(3) == HIGH){
     digitalWrite(5, HIGH);
     delay(500);
     digitalWrite(5, LOW); 
  }
}

Может кто-нибудь объяснить мне, почему это происходит?


person Avi    schedule 06.10.2014    source источник


Ответы (1)


Это просто потому, что контакт 3 установлен в режим высокого импеданса. Таким образом, даже небольшая антенна, состоящая из провода и вашего пальца (которые перехватывают много электрических помех), может вызвать срабатывание булавки и, таким образом, показать высокое (или низкое) значение.

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

pinMode(3, INPUT);

с

pinMode(3, INPUT_PULLUP);

Повторите эксперимент и... он больше не будет плавать...

person frarugi87    schedule 06.10.2014