채터링 #2/2

delay에 의존하는 이전 채터링 해결 방식은 몇가지 문제가 있다. 잡음 등의 순간적인 신호 변화에 반응한다거나 delay동안 다른 작업을 수행할 수 없다. 몇가지 해결 방법을 찾아보다가 MSTimer2 + Bounce2 조합으로 해결하였다.

MSTimer2와 Bounce2를 Arduino IDE의 메뉴에서 Sketch/Include Library/Manage Libraries… 선택하고 각각 검색하고 설치한다.

아래와 같이 메인루프는 다른 일을 할 수 있고, 버튼도 정상적으로 동작한다. 버튼 입력을 인터럽트로 하여 채터링을 제거할 수도 있겠지만 어차피 추가적인 타이머가 필요하고 일도 복잡해질 것으로 판단하여, 조금은 비효율적으로 (1ms마다 계속 포트를 읽고 판단하는 것) 보이지만 이정도 선에서 마무리하자.

ino-d2-sw1_bb

스위치를 D2에 연결하고 풀업으로 설정하자. 내부 풀업이 되어있기 때문에 스위치를 누르면 0V가 된다.