버튼 상태가 무작위로 변경


14

Arduino에 연결된 푸시 버튼이 있지만 무작위로 트리거되는 것 같습니다.

버튼의 한 핀은 arduino의 핀 2에 연결되고 다른 핀은 접지에 연결됩니다.

void setup() {
    Serial.begin(9600);

    pinMode(2, INPUT);
}

void loop() {
    Serial.println(digitalRead(2));
}

버튼을 계속 누르면 1이 계속 인쇄되고 0으로 이동하지만 버튼을 터치하지 않아도 0이 표시되는 경우가 있습니다.

답변:


17

해당 구성에서 버튼이 연결되면 입력이 부동 이라고합니다 . 즉, 0 또는 1이 아닙니다. 버튼을 누르면지면에 연결되어 있으므로 확실히 0이지만, 눌리지 않으면, 우리는 핀의 가치를 모른다.

풀업 저항

버튼을 누르지 않을 때 신호를 로직 1로 끌어 올리려면 "풀업"저항을 포함해야합니다.

풀업 저항

Sparkfun의 이미지

이것이 의미하는 것은 버튼을 누르지 않을 때 Arduino가 로직 1을 읽습니다. 버튼을 누르면 전류가 저항을 통해 접지로 흐르고 Arduino가 로직 0을 읽습니다.

내부 풀업 저항

Arduino에는 내부 풀업 저항도 포함되어 있으므로 회로에 추가 구성 요소를 추가하지 않아도됩니다. 이것을 사용하는 몇 가지 방법이 있습니다.

예전처럼 이렇게해야했습니다 :

pinMode(pin, INPUT);           // set pin to input
digitalWrite(pin, HIGH);       // turn on pullup resistors

이제 한 줄로 간단하게 수행 할 수 있습니다.

pinMode(pin, INPUT_PULLUP);

이를 통해 해당 핀에서 20k 풀업 저항을 사용할 수 있습니다. 버튼을 누르지 않아도 입력이 더 이상 유동하지 않습니다.

참고 : 이것은 다른 쪽 끝이 접지에 연결된 경우에만 작동합니다.


1
풀다운 저항에도 동일한 아이디어가 적용된다는 점은 주목할 가치가 있습니다. 즉, 저항은 일반적으로 핀을 낮게 당기지 만 버튼을 누르면 높이가 높아집니다. 표준 Arduino에는 내부 풀다운이 없으므로 분명히 외부에 있어야합니다.
Peter Bloomfield
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.