Skip to main content

How to use buttons(버튼 사용하기)

이 가이드는 Codi:bit 보드의 내장 버튼을 사용하여 사용자 입력을 감지하는 방법을 보여줍니다.

사전 요구사항

  • Python 기본 지식
  • Codi:bit 보드
  • MicroPython 환경 설정 완료

기본 버튼 눌림 감지

버튼 눌림을 감지하는 가장 간단한 방법은 is_pressed() 메서드를 사용하는 것입니다.

from codibit import *
import time

while True:
# 버튼 A가 현재 눌려있는지 확인
if button_a.is_pressed():
print("버튼 A가 눌려있습니다!")

# 버튼 B가 현재 눌려있는지 확인
if button_b.is_pressed():
print("버튼 B가 눌려있습니다!")

# 너무 빈번한 확인을 피하기 위한 작은 지연
time.sleep(0.1)

버튼 눌림 이벤트 감지

was_pressed()를 사용하여 버튼이 눌렸다가 뗀 이벤트를 감지합니다.

from codibit import *
import time

print("버튼 A 또는 B를 눌러주세요...")

while True:
# 마지막 확인 이후 버튼 A가 눌렸는지 확인
if button_a.was_pressed():
print("버튼 A가 눌렸습니다!")

# 마지막 확인 이후 버튼 B가 눌렸는지 확인
if button_b.was_pressed():
print("버튼 B가 눌렸습니다!")

# 작은 지연
time.sleep(0.1)

버튼 눌림 횟수 세기

get_presses() 메서드는 총 버튼 눌림 횟수를 반환하고 카운터를 리셋합니다.

from codibit import *
import time

print("버튼을 여러 번 누른 후 5초간 기다리면 카운트가 표시됩니다...")

while True:
# 5초 대기
time.sleep(5)

# 버튼 A가 눌린 횟수 가져오기
a_presses = button_a.get_presses()

# 버튼 B가 눌린 횟수 가져오기
b_presses = button_b.get_presses()

# 카운트 표시
if a_presses > 0:
print(f"버튼 A가 {a_presses}번 눌렸습니다")

if b_presses > 0:
print(f"버튼 B가 {b_presses}번 눌렸습니다")

누적 버튼 눌림 횟수 추적

get_press_count() 메서드는 누적된 총 버튼 눌림 횟수를 반환하되 카운터를 리셋하지 않습니다.

from codibit import *
import time

print("버튼을 눌러보세요. 실시간으로 누적 횟수가 표시됩니다...")

while True:
# 누적된 버튼 A 눌림 횟수
total_a = button_a.get_press_count()

# 누적된 버튼 B 눌림 횟수
total_b = button_b.get_press_count()

# 실시간 표시
print(f"\r총 누름 횟수 - A: {total_a}, B: {total_b}", end="")

time.sleep(0.1)

get_presses() vs get_press_count() 비교

두 메서드의 차이점을 이해하는 것이 중요합니다:

from codibit import *
import time

print("버튼을 여러 번 눌러보세요...")
time.sleep(3)

# 첫 번째 확인
presses_a = button_a.get_presses() # 카운터 리셋됨
count_a = button_a.get_press_count() # 카운터 리셋되지 않음

print(f"get_presses(): {presses_a} (리셋됨)")
print(f"get_press_count(): {count_a} (누적)")

time.sleep(2)

# 두 번째 확인
presses_a2 = button_a.get_presses() # 0 (이미 리셋됨)
count_a2 = button_a.get_press_count() # 여전히 누적값

print(f"get_presses(): {presses_a2} (여전히 0)")
print(f"get_press_count(): {count_a2} (누적 유지)")

각 버튼에 다른 동작 설정

각 버튼에 서로 다른 동작을 만들 수 있습니다.

from codibit import *
import time

counter = 0
print("버튼 A: 증가, 버튼 B: 감소")
print(f"카운터: {counter}")

while True:
if button_a.was_pressed():
counter += 1
print(f"카운터: {counter}")

if button_b.was_pressed():
counter -= 1
print(f"카운터: {counter}")

time.sleep(0.1)

버튼 상태 조합

여러 버튼을 동시에 확인할 수 있습니다.

from codibit import *
import time

print("버튼 A와 B를 동시에 눌러주세요...")

while True:
# 두 버튼이 동시에 눌렸는지 확인
if button_a.is_pressed() and button_b.is_pressed():
print("두 버튼이 모두 눌려있습니다!")

# 어느 한 버튼이라도 눌렸는지 확인
elif button_a.was_pressed() or button_b.was_pressed():
if button_a.was_pressed():
print("버튼 A만 눌렸습니다")
if button_b.was_pressed():
print("버튼 B만 눌렸습니다")

time.sleep(0.1)

간단한 메뉴 시스템

버튼을 사용한 기본 메뉴 시스템을 만들어봅시다.

from codibit import *
import time

menu_items = ["게임 시작", "설정", "종료"]
current_item = 0

def show_menu():
print(f"메뉴: {menu_items[current_item]}")
print("A: 선택, B: 다음")

# 초기 메뉴 표시
show_menu()

while True:
if button_a.was_pressed():
# 현재 메뉴 항목 선택
print(f"선택됨: {menu_items[current_item]}")
time.sleep(1)
show_menu()

if button_b.was_pressed():
# 다음 메뉴 항목으로 이동
current_item = (current_item + 1) % len(menu_items)
show_menu()

time.sleep(0.1)

팁과 모범 사례

1. 적절한 메서드 선택

  • is_pressed(): 연속적인 동작용 (예: 버튼을 계속 누르고 있을 때)
  • was_pressed(): 단일 이벤트용 (예: 메뉴 선택)
  • get_presses(): 주기적인 카운팅용 (예: 5초마다 누름 횟수 확인)
  • get_press_count(): 실시간 누적 카운팅용 (예: 총 누름 횟수 추적)

2. 지연 추가

출력이 너무 많아지는 것을 방지하고 적절한 버튼 디바운싱을 위해 루프에 항상 작은 지연을 포함하세요.

3. 버튼 조합

is_pressed()는 현재 상태를 확인하고, was_pressed()는 마지막 호출 이후의 이벤트를 확인한다는 점을 기억하세요.

4. 디바운싱

버튼은 50ms 지연으로 자동 디바운싱 처리되므로 버튼 바운스에 대해 걱정할 필요가 없습니다.

5. 카운터 관리

  • get_presses(): 카운터를 리셋하므로 주기적인 카운팅에 적합
  • get_press_count(): 카운터를 리셋하지 않으므로 누적 통계에 적합