사용 회로와 목표:
사용 회로:
[그림6-9]와 같이 멀티원 실드를 옥토보드의 내부 핀 영역에 장착합니다. 멀티원 실드에서는 L3핀과 L4핀이 버튼에 연결되어 있고, L5핀과 L6핀이 LED에 연결되어 있습니다.
대체 회로:
[그림7-7]과 같이 브레드보드에 C3 mini와 부품들로 회로를 구성합니다. 또는 옥토보드의 외부 핀 영역에 C3 mini와 멀티원 실드을 장착해도 됩니다.
목표:
버튼1을 누르면 LED1과 LED2를 모두 on하고, 버튼2를 누르면 LED1과 LED2를 모두 off합니다.
AI 프롬프트 7-2:
코드 영역으로 마우스를 옮기고 Copy 버튼을 누르면 클립보드에 코드가 복사됩니다.마이크로파이썬 프로그램을 다음 조건에 따라 만들고, 코드를 설명해줘 [조건] from machine import … import time time.sleep_ms()를 사용 두 개의 LED와 두개의 버튼을 사용 모듈 pinno에는 핀 번호 상수 값이 저장되어 있음 import pinno BUTTON_1_PIN = pinno.L3_IN BUTTON_2_PIN = pinno.L4_IN LED_1_PIN = pinno.L5_IN LED_2_PIN = pinno.L6_IN 첫번 째 버튼은 PULL_UP해야 하고 두 번째 버튼은 PULL_DOWN해야 함 BUTTON1_PRESSED_VALUE = 0 BUTTON2_PRESSED_VALUE = 1 첫 번째 LED는 전류 소싱 방식으로 연결되어 있고 두 번째 LED는 전류 싱킹 방식으로 연결되어 있음. LED1_ON_VALUE = 1 LED1_OFF_VALUE = not LED1_ON_VALUE LED2_ON_VALUE = 0 LED2_OFF_VALUE = not LED2_ON_VALUE 프로그램 시작하면 Print(“버튼1을 누르면 on(), 버튼2를 누르면 off()”) 두 LEDx.value(LEDx_OFF_VALUE) 지정 다음은 연속 실행이야: 각각의 버튼이 눌리면: 버튼1이면 두 LED에 대하여 LEDx.value(LEDx.ON_VALUE) 버튼2이면 두 LED에 대하여 LEDx.value(LEDx.OFF_VALUE) 버튼x가 눌린사실과 on 또는 off하는지를 print함 20밀리초의 디바운스 여유를 둠 모드 while loop에 대하여: prev_버튼_상태 = current_버튼_상태 1ms 중지
마크로파이썬 코드
다음은 주어진 조건에 맞춘 MicroPython 프로그램입니다:
코드 영역으로 마우스를 옮기고 Copy 버튼을 누르면 클립보드에 코드가 복사됩니다.from machine import Pin import time import pinno # 핀 번호 설정 BUTTON_1_PIN = pinno.L3_IN BUTTON_2_PIN = pinno.L4_IN LED_1_PIN = pinno.L5_IN LED_2_PIN = pinno.L6_IN # 버튼이 눌린 값 설정 BUTTON1_PRESSED_VALUE = 0 # 버튼 1 눌림 BUTTON2_PRESSED_VALUE = 1 # 버튼 2 눌림 # LED의 ON/OFF 값 설정 LED1_ON_VALUE = 1 # 전류 소싱 방식으로 연결된 LED1 ON LED1_OFF_VALUE = not LED1_ON_VALUE LED2_ON_VALUE = 0 # 전류 싱킹 방식으로 연결된 LED2 ON LED2_OFF_VALUE = not LED2_ON_VALUE # 핀 설정: LED는 출력, 버튼은 입력(PULL_UP, PULL_DOWN) led1 = Pin(LED_1_PIN, Pin.OUT) led2 = Pin(LED_2_PIN, Pin.OUT) button1 = Pin(BUTTON_1_PIN, Pin.IN, Pin.PULL_UP) button2 = Pin(BUTTON_2_PIN, Pin.IN, Pin.PULL_DOWN) # 초기 LED 상태 설정: OFF led1.value(LED1_OFF_VALUE) led2.value(LED2_OFF_VALUE) # 시작 메시지 출력 print("버튼1을 누르면 on(), 버튼2를 누르면 off()") # 버튼 상태 추적 prev_button1_state = button1.value() prev_button2_state = button2.value() while True: # 현재 버튼 상태 읽기 current_button1_state = button1.value() current_button2_state = button2.value() # 버튼 1이 눌렸는지 확인 if current_button1_state == BUTTON1_PRESSED_VALUE and prev_button1_state != current_button1_state: # LED1, LED2 켜기 led1.value(LED1_ON_VALUE) led2.value(LED2_ON_VALUE) print("버튼1 누름, 두 LED on") time.sleep_ms(20) # 디바운스 시간 # 버튼 2가 눌렸는지 확인 if current_button2_state == BUTTON2_PRESSED_VALUE and prev_button2_state != current_button2_state: # LED1, LED2 끄기 led1.value(LED1_OFF_VALUE) led2.value(LED2_OFF_VALUE) print("버튼2 누름, 두 LED off") time.sleep_ms(20) # 디바운스 시간 # 상태 갱신 prev_button1_state = current_button1_state prev_button2_state = current_button2_state # CPU 사용량 줄이기 위해 1ms 중지 time.sleep_ms(1)
코드 설명:
핀 설정 및 초기화:
- 버튼 1은 PULL_UP 설정, 버튼 2는 PULL_DOWN 설정으로 초기화합니다.
led1
은 전류 소싱 방식이므로 ON일 때1
,led2
는 전류 싱킹 방식이므로 ON일 때0
이 됩니다.
LED 초기화:
- 프로그램 시작 시 LED는 OFF 상태 (
led1.value(LED1_OFF_VALUE)
,led2.value(LED2_OFF_VALUE)
)로 설정됩니다.
- 프로그램 시작 시 LED는 OFF 상태 (
버튼 눌림 확인:
- 버튼이 눌렸을 때만 LED 상태를 변경합니다. 버튼 1이 눌리면 두 LED를 켜고, 버튼 2가 눌리면 두 LED를 끕니다.
디바운스 처리:
- 20ms 동안의 지연(
time.sleep_ms(20)
)을 통해 버튼 떨림을 방지합니다.
- 20ms 동안의 지연(
CPU 사용량 감소:
- 매 루프에서 1ms 지연(
time.sleep_ms(1)
)을 두어 CPU 사용량을 줄입니다.
- 매 루프에서 1ms 지연(
이 코드는 버튼 1을 누르면 두 LED가 켜지고, 버튼 2를 누르면 두 LED가 꺼지도록 동작합니다.