아하
  • 토픽

  • 스파링

  • 잉크

  • 미션


거대한거위176

거대한거위176

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 불이 들어오지 않습니다. 납땜에 문제가 있었던건지 프로그래밍에 문제가 있는건지 잘 모르겠어서 질문 올려봅니다.

1개의 답변이 있어요!

  • 박준희 전문가

    박준희 전문가

    삼성물산

    안녕하세요. 박준희 전문가입니다.

    프로그래밍을 보니 문제는 없어보이는데요.

    납땜이 제대로 되지않아 접촉불량으로 불이 안켜진듯 합니다.

    감사합니다.