mcu 마이크로 파이썬 프로그래밍 질문드립니다.
안녕하세요.
제가 rp2040 tiny 모델로 주파수 발생장치를 만들려고 하는데 thonny로 입력했더니 led 불이 들어오지 않는 문제때문에 질문 드립니다.
### 하드웨어 핀 연결
- PWM: 4번 핀
- LED1: 5번 핀
- LED2: 6번 핀
- LED3: 7번 핀
- 버튼1: 8번 핀
- 버튼2: 9번 핀
- 버튼3: 10번 핀
### 소프트웨어 구성 (MicroPython 코드)
```python
from machine import Pin, PWM, Timer
import utime
# 핀 설정
pwm_pin = PWM(Pin(4))
led1 = Pin(5, Pin.OUT)
led2 = Pin(6, Pin.OUT)
led3 = Pin(7, Pin.OUT)
button1 = Pin(8, Pin.IN, Pin.PULL_DOWN)
button2 = Pin(9, Pin.IN, Pin.PULL_DOWN)
button3 = Pin(10, Pin.IN, Pin.PULL_DOWN)
# 초기 상태
power_on = False
timer_button2 = Timer()
timer_blink = Timer()
led2.value(0)
led1.value(0)
led3.value(0)
# 함수 정의
def start_pwm(frequency, duty):
pwm_pin.freq(frequency)
pwm_pin.duty_u16(duty)
def stop_pwm():
pwm_pin.duty_u16(0)
def led_blink(timer):
led2.toggle()
def led_blink1(timer):
led1.toggle()
def led_blink3(timer):
led3.toggle()
def button1_handler(pin):
global power_on
if power_on:
led2.value(0)
led1.value(1)
start_pwm(10, 3277) # 3277은 1mA에 해당하는 듀티 사이클
timer_blink.init(period=2000, mode=Timer.PERIODIC, callback=led_blink1)
utime.sleep(600) # 10분 (600초)
stop_pwm()
timer_blink.deinit()
led1.value(0)
led2.value(1)
def button3_handler(pin):
global power_on
if power_on:
led2.value(0)
led3.value(1)
start_pwm(1, 3277) # 3277은 1mA에 해당하는 듀티 사이클
timer_blink.init(period=2000, mode=Timer.PERIODIC, callback=led_blink3)
utime.sleep(600) # 10분 (600초)
stop_pwm()
timer_blink.deinit()
led3.value(0)
led2.value(1)
def button2_long_press(pin):
global power_on
if not power_on:
power_on = True
led2.value(1)
timer_blink.init(period=2000, mode=Timer.PERIODIC, callback=led_blink)
else:
power_on = False
led2.value(0)
timer_blink.deinit()
stop_pwm()
led1.value(0)
led3.value(0)
def button2_press_check(timer):
if button2.value() == 1:
utime.sleep(2) # 2초간 대기
if button2.value() == 1:
button2_long_press(button2)
# 인터럽트 핸들러 설정
button1.irq(trigger=Pin.IRQ_RISING, handler=button1_handler)
button3.irq(trigger=Pin.IRQ_RISING, handler=button3_handler)
# 버튼 2 체크를 위한 타이머 설정
timer_button2.init(period=100, mode=Timer.PERIODIC, callback=button2_press_check)
# 메인 루프
while True:
utime.sleep(0.1)
```
이렇게 짰는데 버튼 2를 누르면led 불이 들어오지 않습니다. 납땜에 문제가 있었던건지 프로그래밍에 문제가 있는건지 잘 모르겠어서 질문 올려봅니다.
안녕하세요. 박준희 전문가입니다.
프로그래밍을 보니 문제는 없어보이는데요.
납땜이 제대로 되지않아 접촉불량으로 불이 안켜진듯 합니다.
감사합니다.