from machine import Pin, Timer
import time
# 按粉色按鈕可以切換模式 (自動 or 手動) 粉色燈有變化就是成功切換
# 粉色燈為現在的模式 暗:自動 亮:手動
# 按對應顏色按鈕可以切換亮暗(手動)
led_pins = [13, 12, 14]
bnt_pins = [21, 22, 23]
mode_pins = [18, 32]
leds = []
bnts = []
# 燈的持續時間 紅 黃 綠
led_time = [400, 150, 400]
# 針腳設定
for pin in led_pins:
leds.append(Pin(pin, Pin.OUT))
for pin in bnt_pins:
bnts.append(Pin(pin, Pin.IN, Pin.PULL_UP))
MODE_LED = Pin(mode_pins[0], Pin.OUT)
changeMODE = Pin(mode_pins[1], Pin.IN, Pin.PULL_UP)
# 0為自動 1為手動
mode = 0
# 第幾個燈
nled = 0
# 是否為自動
auto_ornot = False
# 設定Timer
led_timer = Timer(0)
bnt_check_timer = Timer(1)
# 切換模式按鈕是否被按下
changeMODE_pressed = False
# 初始化按鍵狀態和Timer1
def init(t):
global changeMODE_pressed
changeMODE_pressed = False
# 手動
def manual(x):
global mode, leds, bnts
if mode:
for nbnt in range(len(bnts)):
if bnts[nbnt].value() == 0:
leds[nbnt].value(1)
else:
leds[nbnt].value(0)
# 自動
def auto(x):
global mode, nled, leds
leds[nled].value(0)
nled = (nled + 1) % 3
leds[nled].value(1)
if not mode:
led_timer.init(period = led_time[nled], mode = Timer.ONE_SHOT, callback = auto)
# 模式切換
def mode_change(pin):
global press_count, changeMODE_pressed, mode, auto_ornot
if changeMODE_pressed == False:
changeMODE_pressed = True
# 切換模式
mode = not mode
MODE_LED.value(mode)
if mode:
for led in leds:
led.value(0)
led_timer.deinit()
else:
auto_ornot = True
if auto_ornot:
nled = 0
for led in leds:
led.value(0)
leds[nled].value(1)
led_timer.init(period = led_time[nled], mode = Timer.ONE_SHOT, callback = auto)
auto_ornot = False
# 避免Bounce
if changeMODE_pressed == True:
bnt_check_timer.init(mode = Timer.ONE_SHOT, period = 100, callback = init)
# 各個按鈕觸發(邊緣下降觸發)
changeMODE.irq(handler = mode_change, trigger = Pin.IRQ_FALLING)
for bnt in bnts:
bnt.irq(handler = manual, trigger = Pin.IRQ_FALLING)
# 自動模式開始
leds[nled].value(1)
led_timer.init(period = led_time[nled], mode = Timer.ONE_SHOT, callback = auto)