from machine import Pin, PWM # 從 machine模組 引入 Pin、PWM 類別
import time # 引入 time 模組
interruptCounter = 0 # 記錄按下按鈕的次數
button = Pin(23, Pin.IN, Pin.PULL_UP) # 設定引腳 23 為按鈕,並啟用內部上拉電阻
LED_red = Pin(25, Pin.OUT) # 設定引腳 25 為紅色 LED,模式為輸出
LED_green = Pin(26, Pin.OUT) # 設定引腳 26 為綠色 LED,模式為輸出
LED_blue = Pin(27, Pin.OUT) # 設定引腳 27 為藍色 LED,模式為輸出
pwm_led_red = PWM(LED_red, freq=1000) # 對紅色 LED 設定 PWM,頻率為 1000 Hz
pwm_led_red.duty(0) # 初始化紅色 LED 亮度為 0
pwm_led_green = PWM(LED_green, freq=1000) # 對綠色 LED 設定 PWM,頻率為 1000 Hz
pwm_led_green.duty(0) # 初始化綠色 LED 亮度為 0
pwm_led_blue = PWM(LED_blue, freq=1000) # 對藍色 LED 設定 PWM,頻率為 1000 Hz
pwm_led_blue.duty(0) # 初始化藍色 LED 亮度為 0
# 處理按鈕中斷事件的回調函數
def button_irq(button):
global interruptCounter # 使用全域變數 interruptCounter
time.sleep_ms(150) # 延遲 150 毫秒以防止按鍵彈跳
if button.value() == 1: # 如果按鈕處於按下狀態
interruptCounter += 1 # 增加中斷計數
print('pin change:', button) # 打印引腳變化
print('interruptCounter:', interruptCounter) # 打印中斷計數
if interruptCounter == 1: # 第一次按下按鈕
# LED 紅色快速漸亮並快速漸暗
for i in range(1024): # 快速漸亮
pwm_led_red.duty(i)
time.sleep(0.001) # 延遲 1 毫秒
for j in range(1024): # 快速漸暗
pwm_led_red.duty(1023 - j)
time.sleep(0.001) # 延遲 1 毫秒
elif interruptCounter == 2:# 第二次按下按鈕
# LED 綠色快速漸亮並快速漸暗
for i in range(1024): # 快速漸亮
pwm_led_green.duty(i)
time.sleep(0.001) # 延遲 1 毫秒
for j in range(1024): # 快速漸暗
pwm_led_green.duty(1023 - j)
time.sleep(0.001) # 延遲 1 毫秒
elif interruptCounter == 3:# 第三次按下按鈕
# LED 藍色規律地亮 3 秒、滅 1.5 秒共 3 次
for k in range(3):
pwm_led_blue.duty(1023) # 設置亮度為最大
time.sleep(3) # 亮 3 秒
pwm_led_blue.duty(0) # 設置亮度為 0
time.sleep(1.5) # 滅 1.5 秒
elif interruptCounter == 4:# 第四次按下按鈕
print("End Program!") # 打印結束程式
# 主迴圈
while True:
button.irq(trigger=Pin.IRQ_RISING, handler=button_irq) # 設定按鈕中斷
if interruptCounter >= 4:
break # 中斷計數為 4 時,跳出迴圈
print('start')
time.sleep(1) # 延遲 1 秒