버튼이 ‘튀는’ 이유
접점에서 발생하는 잘못된 트리거를 살펴봅니다.
버튼이 ‘튀는’ 이유은(는) CoddyKit의 무료 Arduino & IoT Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Arduino & IoT Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Arduino & IoT Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
한 번 눌렀는데 여러 신호
버튼을 한 번 눌렀지만 Arduino는 여러 번 누른 것으로 인식할 수 있습니다. 이 까다로운 문제를 바운스라고 하며, 거의 모든 초보자를 곤란하게 합니다. 😅
푸시 버튼 내부
버튼은 누르면 맞닿는 두 개의 금속 접점일 뿐입니다. 손가락으로는 단단하게 느껴지지만 마이크로초 단위에서는 전혀 그렇지 않습니다.
떨리는 금속
접점이 맞닿으면 안정되기 전에 몇 밀리초 동안 물리적으로 진동합니다. 아주 작은 접촉과 분리가 각각 별도의 전기적 이벤트가 됩니다.
핀이 보는 것
이 진동 동안 핀은 한 번의 깔끔한 변화가 아니라 빠르게 반복되는 HIGH-LOW 전환을 읽습니다. 코드가 모든 전환을 버튼 입력으로 셀 수 있습니다.
반복문이 이를 포착하는 이유
loop()는 초당 수백만 번 실행되어 바운스가 안정되는 속도보다 훨씬 빠릅니다. 따라서 잡음을 계속해서 반복해서 샘플링합니다.
폭주하는 카운터
버튼을 누를 때마다 1씩 증가하는 카운터를 생각해 보십시오. 여러 번의 잘못된 트리거 때문에 실제로 한 번 눌렀는데 값이 3이나 4 증가할 수 있습니다.
if (digitalRead(BTN) == LOW) {
count++; // may fire several times per tap
}놓을 때도 발생합니다
바운스는 누를 때뿐 아니라 손을 뗄 때도 발생합니다. 신호의 양쪽 에지 모두 불안정하게 변해 프로그램의 판단을 혼란스럽게 할 수 있습니다.
지속 시간
대부분의 바운스는 약 5~20밀리초 안에 안정됩니다. 짧은 시간이지만 빠른 마이크로컨트롤러에게는 잡음이 영원처럼 긴 시간입니다.
직접 확인하기
핀이 LOW가 될 때마다 메시지를 출력하고 버튼을 한 번 눌러 보십시오. Serial Monitor에 여러 줄이 표시되면 바운스가 실제로 발생한다는 뜻입니다.
if (digitalRead(BTN) == LOW)
Serial.println("pressed");하드웨어 또는 소프트웨어로 해결하기
회로에 작은 축전기를 추가하거나 코드에 시간 측정 로직을 넣어 바운스를 줄일 수 있습니다. 소프트웨어 방식이 더 저렴하고 훨씬 일반적입니다.
핵심 아이디어
해결 방법은 첫 번째 변화가 발생한 뒤 잠시 기다리고 나머지는 무시하는 것입니다. 버튼이 정말 안정되었는지 확인한 뒤 동작하십시오.
빠른 확인
버튼에서 바운스가 발생하는 원인을 확인해 보겠습니다.
복습: 바운스 기초
버튼의 접점이 바운스되어 빠른 코드를 속이는 잡음 섞인 전환을 보낸다는 것을 배웠습니다. 다음에는 간단한 시간 측정으로 이 잡음을 없애겠습니다. 🎯
AI 튜터와 함께 C++을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 30
- 레슨
- 120
자주 묻는 질문
“버튼이 ‘튀는’ 이유” 강의는 무료인가요?
네 — “버튼이 ‘튀는’ 이유” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Arduino & IoT Academy 강의 전체를 잠금 해제할 수 있습니다. Arduino & IoT Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“버튼이 ‘튀는’ 이유”에서 뭘 배우나요?
접점에서 발생하는 잘못된 트리거를 살펴봅니다. 브라우저에서 직접 실행하는 실습 코드로 Arduino & IoT Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Arduino & IoT Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Arduino & IoT Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“버튼이 ‘튀는’ 이유” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Arduino & IoT Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Arduino & IoT Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.