from machine import Pin, PWM
import time
interruptCounter = 0 # 記錄按下按鈕的次數
interruptHandled = False # 用於標記中斷是否已處理
button = Pin(35, Pin.IN, Pin.PULL_UP) # 按鈕
LED_red = Pin(19, Pin.OUT) # 紅色 LED
LED_green = Pin(18, Pin.OUT) # 綠色 LED
LED_blue = Pin(17, Pin.OUT) # 藍色 LED
pwm_led_red = PWM(LED_red, freq=1000) # 紅色 LED PWM 控制
pwm_led_red.duty(0) # 初始化紅色 LED 亮度為 0
pwm_led_green = PWM(LED_green, freq=1000) # 綠色 LED PWM 控制
pwm_led_green.duty(0) # 初始化綠色 LED 亮度為 0
pwm_led_blue = PWM(LED_blue, freq=1000) # 藍色 LED PWM 控制
pwm_led_blue.duty(0) # 初始化藍色 LED 亮度為 0
def button_irq(button):
global interruptCounter, interruptHandled
time.sleep_ms(150) # 防止彈跳
if button.value() == 1 and not interruptHandled:
interruptCounter += 1
interruptHandled = True
print('pin hcange:', button)
print('interruptCounter:', interruptCounter)
if interruptCounter % 4 == 1:
# LED 紅色快速漸亮並快速漸暗
for i in range(1024): # 快速漸亮
pwm_led_red.duty(i)
time.sleep(0.001)
for j in range(1024): # 快速漸暗
pwm_led_red.duty(1023 - j)
time.sleep(0.001)
elif interruptCounter % 4 == 2:
# LED 綠色快速漸亮並快速漸暗
for i in range(1024): # 快速漸亮
pwm_led_green.duty(i)
time.sleep(0.001)
for j in range(1024): # 快速漸暗
pwm_led_green.duty(1023 - j)
time.sleep(0.001)
elif interruptCounter % 4 == 3:
# LED 藍色規律地亮 3 秒、滅 1.5 秒共 3 次
for k in range(3):
pwm_led_blue.duty(1023) # 亮
time.sleep(3)
pwm_led_blue.duty(0) # 滅
time.sleep(1.5)
elif interruptCounter % 4 == 0:
print("End Program!")
# 停止程式
return
elif button.value() == 0:
interruptHandled = False # 重置標記
# 主迴圈
while True:
button.irq(trigger=Pin.IRQ_RISING, handler=button_irq)
pwm_led_red.duty(1000)
print('start')
# 主程式可以在這裡執行其他任務
time.sleep(1)