프로그래밍/하드웨어

[Arduino] 버튼(Button)의 값이 정확하지 않을때 - 풀 업(Pull Up), 풀 다운(Pull Down) 사용 방법

당근천국 2019. 7. 26. 15:30

간만에 만들 게 있어서 아두이노를 연결하고 버튼을 연결했는데.....

 

 

간단하게 코드를 만들어서 올리고....

#define Button01 2
 
void setup() 
{
  Serial.begin(9600);
  
  pinMode(Button01, INPUT);
}
 
void loop() 
{
  Serial.println(digitalRead(Button01));
  delay(10);
}

 

버튼을 누르지 않았을 때 입력값이 이상합니다???

 

연관글 영역

 

 

1. 플로팅(floating)

버튼을 누르지 않고 있을 때 값이 랜덤하게 나오는 것을 플로팅(floating)상태라고 합니다.

이 상태에서는 버튼값이 0이나 1이 아닙니다.

( 참고 : stackExchange - Button state changing randomly, Arduino Tutorlals - Button )

 

 

2. 상태 변경

플로팅 상태를 해결하려면 풀 업(Pull Up), 풀 다운(Pull Down) 회로를 만들어야 합니다.

방법은 접지해주는 것인데 그냥 접지하면  그냥 다운되어버리니 저항을 연결하여 상태를 유지하는 것이죠.

 

2-1. 풀 다운(Pull Down) 저항 만들기

풀 다운은 버튼이 눌리지 않았을 때 '0'을 유지합니다.

GitHub - https://github.com/dang-gun/ArduinoSample/tree/master/ButtonFloating

ButtonFloating_PullDown.fzz
다운로드

 

 

이제 실행해보면 버튼을 누르지 않았을 때 '0'값이 유지됩니다.

 

 

2-2. 풀 업(Pull Up) 저항 만들기

풀 업은 버튼이 눌리지 않았을 때 '1'을 유지니다.

GitHub - https://github.com/dang-gun/ArduinoSample/tree/master/ButtonFloating

ButtonFloating_PullUp.fzz
다운로드

 

 

이제 실행해보면 버튼을 누르지 않았을 때 '1'값이 유지됩니다.

 

 

3. 인풋 풀업(INPUT_PULLUP) 설정

핀설정을 할때 Pull-Up설정을 할 수 있습니다.

 

이렇게하면 저항을 연결하지 않아도 풀업 상태를 유지합니다.

pinMode(Button02, INPUT_PULLUP);

 

 

마무리

이게 배선에 따라 자기도 모르게 풀업이나 풀다운이 될 수 있습니다.

버튼을 처음 단독으로 쓰다가 당황했네요. ㅋㅋㅋㅋ