아주 기본적인 이야기 이지만, 버튼을 눌렀을 때 Bouncing 이 발생한다는건 많은사람들이 상식적으로 알고있는 이야기 이다.
하지만 실제로 어떻게 시그널이 생성되는지 잠시 알아보기 위해 몇가지 실험을 해보고 이를 해결하기 위한 방법을 S/W 와 H/W 로 접근해보기로 한다.
일단 수치적으로 보면 버튼을 눌렀을 때 아래와 같은 현상이 발생한다.
A0 (14) 핀에 버튼을 물려놨고, 버튼이 처음 HIGH 일 때 부터 1000 번의 루프에서 digitalRead() 를 한 결과이다.
버튼을 누르고 있는 상태에서 조금 버튼을 비벼(?)댔더니 96%와 심지어 28%까지의 결과가 중간에 나온다.
위 실험 결과를 보면, 눌렀다 떼었다 한 부분이 다른 부분은 명확하지만 파란색 박스가 쳐져있는 부분은 순간적인 Bouncing 이 일어난 부분이다. 만약 무조건 HIGH = 눌림 으로 했거나 Interrupt 를 걸어서 H-L 위상 변화 시에 눌림으로 인식하게 했다면 파란색 부분은 두번 이상 눌린 효과가 발생했을 것이다.
(Plotting 도구와 내 컴퓨터의 성능 한계로, 아두이노는 115200 속도에 5ms 딜레이를 매 루프 내에 주었다. 5ms 미만으로 줄 경우 툴이 반응하지 못해서 측정이 불가하다. 오실로스코프가 필요한때이다 싶다)
위 그래프는 아날로그로 Read 한 결과이다. 누른 상태에서 버튼을 비벼대니 저런 지저분한 결과가 나왔다. 원래 의도대로라면 계속 눌려있어야 하는데 눌리지 않고 중간에 저렇게 전압이 마구 변동되는 모습을 볼 수 있다.
앞으로 해볼일은 위 현상들을 Single 버튼일때 없애는 것과 ADC 를 통해 Analog 로 여러 버튼으로 읽을 때 없애는 것이며, S/W 와 H/W 적인 방식에 대해 직접 테스트 해볼 예정이다.
'Software Development > IoT, Arduino, RasberryPi' 카테고리의 다른 글
아두이노 송수신기 만들기 #서보&모터 테스트 (3) | 2015.11.15 |
---|---|
아두이노 송수신기 만들기 #수신기 회로 (0) | 2015.11.08 |
아두이노 송수신기 만들기 #조이스틱 연결 (1) | 2015.11.07 |
아두이노 송수신기 만들기 #통신모듈 테스트 (3) | 2015.10.31 |
NRF24L01 모듈 #2 - 소프트웨어 (4) | 2015.10.31 |