프롬프트
프롬프트 영역으로 마우스를 옮기고 Copy 버튼을 누르면 클립보드에 프롬프트의 내용이 복사됩니다.마이크로파이썬 프로그램을 다음 조건에 따라 만들고, 코드를 설명해 줘.
from machine import …
import time
time.sleep_ms()를 사용함.
2개의 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해야 함.
BUTTON_1_PRESSED_VALUE = 0
BUTTON_2_PRESSED_VALUE = 1
첫 번째 LED는 전류 소싱 방식으로 연결되어 있고,
두 번째 LED는 전류 싱킹 방식으로 연결되어 있음.
LED_1_ON_VALUE = 1
LED_1_OFF_VALUE = not LED_1_ON_VALUE
LED_2_ON_VALUE = 0
LED_2_OFF_VALUE = not LED_2_ON_VALUE
프로그램 시작하면
Print("버튼_1을 누르면 on(), 버튼_2를 누르면 off()")
두 LED_x.value(LED_x_OFF_VALUE) 지정
다음은 연속 실행이야:
각각의 버튼이 눌리면:
버튼_1이면 두 LED에 대해 LED_x.value(LED_x.ON_VALUE)
버튼_2이면 두 LED에 대해 LED_x.value(LED_x.OFF_VALUE)
버튼_x가 눌린 사실과 on 또는 off하는지를 print함.
20ms의 디바운스 여유를 둠.
모드 while loop에 대해:
prev_버튼_상태 = current_버튼_상태
1ms 중지
AI가 만든 코드
프로그램: 7_2_read_two_buttons_on_off_leds.py
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
# 버튼이 눌린 값 설정
BUTTON_1_PRESSED_VALUE = 0 # 버튼_1 눌림
BUTTON_2_PRESSED_VALUE = 1 # 버튼_2 눌림
# LED의 ON/OFF 값 설정
LED_1_ON_VALUE = 1 # 전류 소싱 방식으로 연결된 LED_1 ON
LED_1_OFF_VALUE = not LED_1_ON_VALUE
LED_2_ON_VALUE = 0 # 전류 싱킹 방식으로 연결된 LED_2 ON
LED_2_OFF_VALUE = not LED_2_ON_VALUE
# 핀 설정: LED는 출력, 버튼은 입력(PULL_UP, PULL_DOWN)
led_1 = Pin(LED_1_PIN, Pin.OUT)
led_2 = Pin(LED_2_PIN, Pin.OUT)
button_1 = Pin(BUTTON_1_PIN, Pin.IN, Pin.PULL_UP)
button_2 = Pin(BUTTON_2_PIN, Pin.IN, Pin.PULL_DOWN)
# 초기 LED 상태 설정: OFF
led_1.value(LED_1_OFF_VALUE)
led_2.value(LED_2_OFF_VALUE)
# 시작 메시지 출력
print("버튼_1을 누르면 on(), 버튼_2를 누르면 off()")
# 버튼 상태 추적
prev_BUTTON_1_state = button_1.value()
prev_BUTTON_2_state = button_2.value()
while True:
# 현재 버튼 상태 읽기
current_BUTTON_1_state = button_1.value()
current_BUTTON_2_state = button_2.value()
# 버튼_1이 눌렸는지 확인
if current_BUTTON_1_state == BUTTON_1_PRESSED_VALUE and prev_BUTTON_1_state != current_BUTTON_1_state:
# LED1, LED2 켜기
led_1.value(LED_1_ON_VALUE)
led_2.value(LED_2_ON_VALUE)
print("버튼_1 누름, 두 LED on")
time.sleep_ms(20) # 디바운스 시간
# 버튼_2가 눌렸는지 확인
if current_BUTTON_2_state == BUTTON_2_PRESSED_VALUE and prev_BUTTON_2_state != current_BUTTON_2_state:
# LED1, LED2 끄기
led_1.value(LED_1_OFF_VALUE)
led_2.value(LED_2_OFF_VALUE)
print("버튼_2 누름, 두 LED off")
time.sleep_ms(20) # 디바운스 시간
# 상태 갱신
prev_BUTTON_1_state = current_BUTTON_1_state
prev_BUTTON_2_state = current_BUTTON_2_state
# CPU 사용량 줄이기 위해 1ms 중지
time.sleep_ms(1)
AI가 만든 코드 설명
1. 핀 설정 및 초기화
- 버튼_1은 PULL_UP 설정, 버튼_2는 PULL_DOWN 설정으로 초기화합니다.
- led_1은 전류 소싱 방식이므로 ON일 때 1, led_2는 전류 싱킹 방식이므로 ON일 때 0이 됩니다.
2. LED 초기화
프로그램 시작 시 LED는 OFF 상태 (led_1.value(LED_1_OFF_VALUE), led_2.value(LED2
OFF_VALUE))로 설정됩니다.
3. 버튼 눌림 확인
버튼이 눌렸을 때만 LED 상태를 변경합니다. 버튼_1이 눌리면 두 LED를 켜고, 버튼_2가 눌리면 두 LED를 끕니다.
4. 디바운스 처리
20ms 동안의 지연(time.sleep_ms(20))을 통해 버튼 떨림을 방지합니다.
5. CPU 사용량 감소
매 루프에서 1ms 지연(time.sleep_ms(1))을 두어 CPU 사용량을 줄입니다.
이 코드는 버튼_1을 누르면 두 LED가 켜지고, 버튼_2를 누르면 두 LED가 꺼지도록 동작합니다.