Arduino & IoT Academy · 강의

millis()로 디바운싱하기

짧은 안정화 시간 동안 잡음을 무시합니다.

레슨 2/413개 단계

millis()로 디바운싱하기은(는) CoddyKit의 무료 Arduino & IoT Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Arduino & IoT Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Arduino & IoT Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

왜 delay()를 사용하지 않을까요?

버튼을 누른 뒤 delay()로 멈출 수도 있지만, 그러면 보드 전체가 멈춥니다. 버튼을 깔끔하게 처리하는 더 현명한 도구는 millis()입니다.

millis()는 스톱워치입니다

millis()는 보드가 실행된 후 몇 밀리초가 지났는지 반환합니다. 두 번 읽은 값을 비교하면 멈추지 않고 경과 시간을 측정할 수 있습니다.

unsigned long now = millis();

디바운스 계획

아이디어는 간단합니다. 핀의 상태가 바뀌면 타이머를 시작합니다. 짧은 시간 동안 새 상태가 계속 유지될 때만 그 상태를 신뢰합니다.

디바운스 시간 정하기

약 50밀리초의 지연이 전통적인 선택입니다. 바운스가 끝나기에는 충분히 길지만 사람이 알아차리기에는 너무 짧습니다.

const unsigned long DEBOUNCE = 50;

마지막 변화를 기억하기

핀이 마지막으로 전환된 시점을 저장할 변수가 필요합니다. 반복문이 실행될 때마다 그 값을 현재 시간과 비교하십시오.

unsigned long lastChange = 0;

두 상태 추적하기

원시 판독값과 확인된 안정 상태를 따로 유지하십시오. 원시 판독값은 잡음이 있지만, 안정 상태는 로직이 신뢰하는 값입니다.

int lastRaw = HIGH;
int stable = HIGH;

전환 감지하기

각 loop마다 핀을 읽습니다. 이전 원시 값과 다르면 신호가 방금 변한 것이므로 타이머를 재설정합니다.

int raw = digitalRead(BTN);
if (raw != lastRaw)
  lastChange = millis();

안정될 때까지 기다리기

마지막으로 상태가 바뀐 뒤 충분한 시간이 지났다면 판독값이 안정된 것입니다. 이제 이 값을 실제 상태로 받아들여도 안전합니다.

if (millis() - lastChange > DEBOUNCE) {
  stable = raw;
}

변화 순간에 동작하기

누를 때마다 한 번만 동작하게 하려면 안정된 상태가 LOW로 바뀌는지 확인합니다. 이 한 번의 변화 순간이 잡음이 제거된 깨끗한 누름입니다.

if (stable == LOW && lastStable == HIGH)
  Serial.println("clean press");

다음 반복을 위해 업데이트하기

loop가 끝날 때 현재 판독값을 last 변수에 저장합니다. 이렇게 하면 매번 비교할 때 최신 값이 사용됩니다.

lastRaw = raw;
lastStable = stable;

블로킹하지 않으면 유리합니다

millis()는 보드를 일시 정지시키지 않으므로 센서와 출력이 계속 작동합니다. 다른 모든 기능이 계속 살아 있는 동안 디바운싱을 수행할 수 있습니다. 🚀

빠른 확인

millis()를 사용한 디바운싱이 누름을 실제 동작으로 판단하는 방식을 확인해 보겠습니다.

복습: 깨끗한 누름

millis()를 사용해 보드를 멈추지 않고 바운스를 무시했으며, 누름이 안정된 뒤에만 한 번 받아들였습니다. 견고하고 전문적인 입력 방식입니다! ✅

무료로 시작

AI 튜터와 함께 C++을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
30
레슨
120

자주 묻는 질문

“millis()로 디바운싱하기” 강의는 무료인가요?

네 — “millis()로 디바운싱하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Arduino & IoT Academy 강의 전체를 잠금 해제할 수 있습니다. Arduino & IoT Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“millis()로 디바운싱하기”에서 뭘 배우나요?

짧은 안정화 시간 동안 잡음을 무시합니다. 브라우저에서 직접 실행하는 실습 코드로 Arduino & IoT Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Arduino & IoT Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Arduino & IoT Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“millis()로 디바운싱하기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Arduino & IoT Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Arduino & IoT Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 버튼이 ‘튀는’ 이유
  2. millis()로 디바운싱하기
  3. EEPROM에 값 저장하기
  4. 리셋 후에도 카운터 기억하기
← Arduino & IoT Academy(으)로 돌아가기