실행 환경과 목표
사용 회로:
[그림6-9]와 같이 멀티원 실드를 옥토보드의 내부 핀 영역에 장착합니다. 멀티원 실드에서는 L5핀과 L6핀이 버튼에 연결되어 있습니다.
대체 회로:
[그림7-3]과 같이 브레드보드에 C3 mini와 부품들로 회로를 구성합니다. 또는 옥토보드의 외부 핀 영역에 C3 mini와 멀티원 실드을 장착해도 됩니다.
목표:
두 개의 버튼을 각각 누를 때마다 버튼 핀의 값을 읽어서 출력하는 프로그램을 만듭니다. 버튼에는 각각 내부 풀업 회로와 내부 풀다운 회로를 설정해야 하고, 버튼의 디바운스 기능도 부여해야 합니다.
AI 프롬프트 6-1
코드 영역으로 마우스를 옮기고 Copy 버튼을 누르면 클립보드에 코드가 복사됩니다.마이크로파이썬 프로그램을 다음 조건에 따라 만들고, 코드를 설명해줘 [조건] from machine import … import time 두개의 버튼을 사용 모듈 pinno에는 핀 번호 상수 값이 저장되어 있음 import pinno BUTTON_1_PIN = pinno.L5_IN BUTTON_2_PIN = pinno.L6_IN 첫번 째 버튼은 PULL_UP해야 하고 두 번째 버튼은 PULL_DOWN해야 함 프로그램 시작하면 Print(“버튼1과 2를 눌러 보셔요”) 다음은 계속 실행해야 해 각각의 버튼 값을 읽어서 값이 달라지면 Print(“버튼x의 값이 바뀜”,버튼x의 값) 20밀리초의 디바운스 여유를 둠
마이크로파이썬 코드
다음은 두 개의 버튼을 사용한 MicroPython 프로그램 코드입니다. 각 버튼의 핀 번호와 풀업(PULL_UP), 풀다운(PULL_DOWN) 설정을 사용해 버튼 상태를 감지하고 상태가 변경될 때 출력하는 프로그램입니다.
from machine import Pin import time import pinno # 핀 번호 상수 설정 BUTTON_1_PIN = pinno.L5_IN # 첫 번째 버튼 (PULL_UP) BUTTON_2_PIN = pinno.L6_IN # 두 번째 버튼 (PULL_DOWN) # 버튼 설정 button1 = Pin(BUTTON_1_PIN, Pin.IN, Pin.PULL_UP) # PULL_UP 방식 button2 = Pin(BUTTON_2_PIN, Pin.IN, Pin.PULL_DOWN) # PULL_DOWN 방식 # 시작 메시지 출력 print("버튼1과 2를 눌러 보셔요") # 각 버튼의 이전 상태 저장 prev_button1_state = button1.value() prev_button2_state = button2.value() # 메인 루프 while True: # 버튼 1 상태 확인 current_button1_state = button1.value() if current_button1_state != prev_button1_state: # 버튼 1 상태가 바뀐 경우 print("버튼1의 값이 바뀜", current_button1_state) prev_button1_state = current_button1_state # 상태 업데이트 time.sleep(0.02) # 디바운스 (20밀리초) # 버튼 2 상태 확인 current_button2_state = button2.value() if current_button2_state != prev_button2_state: # 버튼 2 상태가 바뀐 경우 print("버튼2의 값이 바뀜", current_button2_state) prev_button2_state = current_button2_state # 상태 업데이트 time.sleep(0.02) # 디바운스 (20밀리초)
코드 설명:
핀 번호 설정:
BUTTON_1_PIN
과BUTTON_2_PIN
은pinno.L5_IN
과pinno.L6_IN
으로 설정되어 있습니다. 이 핀들은 각각 풀업(PULL_UP)과 풀다운(PULL_DOWN)으로 설정됩니다.
버튼 설정:
button1
은 풀업 방식(Pin.PULL_UP
)으로 설정되어 버튼을 누르지 않으면 기본적으로 HIGH(1), 누르면 LOW(0)를 반환합니다.button2
는 풀다운 방식(Pin.PULL_DOWN
)으로 설정되어 버튼을 누르지 않으면 LOW(0), 누르면 HIGH(1)을 반환합니다.
메인 루프:
- 프로그램은 계속 실행되면서 각 버튼의 상태를 읽습니다.
- 이전 상태(
prev_button1_state
,prev_button2_state
)와 비교하여 버튼 상태가 변하면 메시지를 출력합니다. - 상태가 변경될 때마다 20밀리초의 대기 시간(디바운스)을 둬서 떨림 현상을 방지합니다.
이 코드는 두 버튼의 상태 변화를 실시간으로 감지하고, 상태가 변경될 때만 출력하며, 디바운스 처리를 통해 노이즈를 제거합니다.