GPIO · 학습

실행 조건

기준 실습은 기록된 파형으로 수행합니다. 장치 확장에서는 원본 RPi.GPIO 코드의 BCM 번호·입력/출력 설정을 사용한 보드와 대조하세요.

이번에 배울 내용

한 번 누른 버튼에서 여러 신호가 들어오는 현상을 시간 기록으로 읽고, 입력 처리 규칙을 정합니다.

전체 흐름

버튼 신호 → 전환 시각 → Polling·Debounce → 눌림 사건

버튼의 물리 신호와 사건

기계식 접점은 한 번 눌러도 짧은 시간 동안 여러 번 바뀔 수 있습니다. 기록된 전환 시각을 보면 눌림 횟수와 신호 변화 횟수가 왜 다른지 알 수 있습니다.

관측 간격과 Debounce

Polling은 값을 읽는 주기이고 Debounce는 가까운 변화를 묶는 규칙입니다. 너무 긴 Polling은 짧은 입력을 놓치고, 너무 긴 Debounce는 실제 연속 입력을 합칠 수 있습니다.

시간 단위를 통일해 비교합니다.

풀이 예제

(t_ms,level)=[(0,0),(10,1),(12,0),(14,1),(50,0),(80,1)]입니다. 두 기록 사이에는 직전 level이 유지됩니다.

import numpy as np
import matplotlib.pyplot as plt
events=[(0,0),(10,1),(12,0),(14,1),(50,0),(80,1)]
rising=[t for (t,x),(_,previous) in zip(events[1:],events[:-1]) if previous==0 and x==1]
print('raw rising',rising)
raw rising [10, 14, 80]

참고 예제

추가 예제 보기

참고 자료