프롬프트
프롬프트 영역으로 마우스를 옮기고 Copy 버튼을 누르면 클립보드에 프롬프트의 내용이 복사됩니다.마이크로파이썬 프로그램을 다음 조건에 따라 만들고, 코드를 설명해 줘. from machine import … import time time.sleep_ms()를 사용함. 2개의 LED와 2개의 버튼을 사용함. 모듈 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 LED_1: 핀 번호: LED_1_PIN 전류 소싱으로 연결함. LED_1_ON_VALUE = 1 LED_1_OFF_VALUE = not LED_1_ON_VALUE LED_2:핀 번호: LED_2_PIN 전류 싱킹으로 연결함. LED_2_ON_VALUE = 0 LED_2_OFF_VALUE = not LED_2_ON_VALUE led_1_toggle(): LED_1이 켜져 있으면 off LED_1이 꺼져 있으면 on 디바운스를 위해: irq(handler=None) 300ms 중지 다시 irq 실행 led_2_on_off(): 버튼_2의 값이 HIGH(눌렸으면) LED_2를 on 버튼_2의 값이 LOW(해제되었으면) LED_2를 off 버튼_1: 핀 번호: BUTTON_1_PIN PULL_UP 해야 함. irq 설정: falling(HIGH에서 LOW) handler: led_1_toggle() 버튼_2: 핀 번호: BUTTON_2_PIN PULL_DOWN 해야 함. irq 설정: rising과 falling 동시 handler: led_2_on_off() 프로그램 시작하면 Print("버튼_1을 누르면 LED_1 toggle(), 버튼_2를 누르면 LED_2 on() 떼면 off()") 두 LED를 off 다음은 연속 실행이야: 모든 while loop에 대해: 1ms 중지
AI가 만든 코드
프로그램: 8_1_interrupt_buttons_control_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 # 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 # LED 핀 설정 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_1 토글 함수 (디바운스 포함) def led_1_toggle(pin): # LED_1 토글 if led_1.value() == LED_1_ON_VALUE: led_1.value(LED_1_OFF_VALUE) else: led_1.value(LED_1_ON_VALUE) # IRQ 비활성화 (디바운스 처리) button_1.irq(handler=None) # IRQ 비활성화 time.sleep_ms(300) # 300ms 대기 button_1.irq(trigger=Pin.IRQ_FALLING, handler=led_1_toggle) # IRQ 다시 활성화 # LED_2 on/off 함수 def led_2_on_off(pin): if button_2.value() == 1: # 버튼_2가 눌렸을 때 led_2.value(LED_2_ON_VALUE) else: # 버튼_2가 해제되었을 때 led_2.value(LED_2_OFF_VALUE) # IRQ 설정: 버튼_1의 FALLING 엣지에서 led_1_toggle() 실행 button_1.irq(trigger=Pin.IRQ_FALLING, handler=led_1_toggle) # IRQ 설정: 버튼_2의 RISING, FALLING에서 led_2_on_off() 실행 button_2.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=led_2_on_off) # 프로그램 시작 시 메시지 출력 print("버튼_1을 누르면 LED_1 toggle(), 버튼_2를 누르면 LED_2 on() 떼면 off()") # LED 초기 상태 off led_1.value(LED_1_OFF_VALUE) led_2.value(LED_2_OFF_VALUE) # 메인 루프 while True: time.sleep_ms(1)
AI가 만든 코드 설명
1. 핀 설정 및 변수 정의
pinno 모듈에서 핀 번호 상수를 불러와 버튼과 LED 핀을 설정합니다. LED_1은 전류 소싱으로 연결되고, LED_2는 전류 싱킹으로 연결됩니다. LED_1_ON_VALUE = 1, LED_2_ON_VALUE = 0으로 설정됩니다.
2. led_1_toggle 함수
LED_1을 토글하는 함수입니다. 디바운스 처리를 위해, LED_1을 토글한 후 버튼_1의 인터럽트를 해제(irq(handler=None))하고, 300ms 동안 대기 후 다시 인터럽트를 활성화합니다.
3. led_2_on_off 함수
버튼_2가 눌리면 LED_2를 켜고, 해제되면 LED_2를 끄는 함수입니다.
4. IRQ 설정
- 버튼_1은 PULL_UP 저항을 사용하고, FALLING(HIGH에서 LOW) 시 led_1_toggle( ) 함수가 호출됩니다.
- 버튼_2는 PULL_DOWN 저항을 사용하고, RISING과 FALLING 모두에서 led_2_on_off( ) 함수가 호출됩니다.
5. 프로그램 시작 시 메시지 출력
한국어로 프로그램 동작에 대한 설명을 출력하며, LED_1과 LED_2를 초기 상태로 꺼 둡니다.
6. 메인 루프
time.sleep_ms(1)으로 1ms 동안 대기하면서 프로그램을 계속 실행합니다.