[Arduino] 버튼(Button)의 값이 정확하지 않을때 - 풀 업(Pull Up), 풀 다운(Pull Down) 사용 방법
간만에 만들 게 있어서 아두이노를 연결하고 버튼을 연결했는데.....
간단하게 코드를 만들어서 올리고....
#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
이제 실행해보면 버튼을 누르지 않았을 때 '0'값이 유지됩니다.
2-2. 풀 업(Pull Up) 저항 만들기
풀 업은 버튼이 눌리지 않았을 때 '1'을 유지니다.
GitHub - https://github.com/dang-gun/ArduinoSample/tree/master/ButtonFloating
이제 실행해보면 버튼을 누르지 않았을 때 '1'값이 유지됩니다.
3. 인풋 풀업(INPUT_PULLUP) 설정
핀설정을 할때 Pull-Up설정을 할 수 있습니다.
이렇게하면 저항을 연결하지 않아도 풀업 상태를 유지합니다.
pinMode(Button02, INPUT_PULLUP);
마무리
이게 배선에 따라 자기도 모르게 풀업이나 풀다운이 될 수 있습니다.
버튼을 처음 단독으로 쓰다가 당황했네요. ㅋㅋㅋㅋ