from machine import Pin #引入module:machine,在此只引入"Pin"功能
import time #引入module:time
LED = Pin(21, Pin.OUT) #GPIO.21設定為輸出接腳,定義名稱:LED
SW1 = Pin(34, Pin.IN) #GPIO.34設定為輸入接腳,定義名稱:SW1
SW2 = Pin(14, Pin.IN) #GPIO.14設定為輸入接腳,定義名稱:SW2
LED.value(0) #復歸LED狀態
"""
名稱:LED_shine
功能說明:LED閃爍,可調整閃爍次數
細項:
run_times可依需求設定閃爍次數
對於LED設定其value數值來表示接腳高/低態,以控制LED亮/滅
使用內建module:time 的sleep程式達成delay同等功能
"""
def LED_shine(run_times):
for times in range(run_times):
LED.value(1)
time.sleep(0.3)
LED.value(0)
time.sleep(0.3)
"""
名稱:key_scan
功能說明:檢測SW1、SW2按鍵觸發狀態,並返回當前按鍵狀態
細項:
key_state 來表示按鍵狀態
0=無按鍵觸發,1=SW1僅觸發,2=SW2僅觸發,3=SW1、SW2皆觸發
因SW1、SW2皆使用上拉電阻,故按鍵未觸發時為高態(bool=1),所以檢測當接腳value為0時判定為"觸發"
為返回觸發狀態使用return指令回傳key_state以達成"返回觸發狀態"
"""
def key_scan():
key_state=0
#SW1觸發、SW2未觸發
if(SW1.value()==0 and SW2.value()==1):
key_state=1
#SW1未觸發、SW2觸發
if(SW1.value()==1 and SW2.value()==0):
key_state=2
#SW1觸發、SW2觸發
if(SW1.value()==0 and SW2.value()==0):
key_state=3
return key_state
#告知是否完成初始化(目前已暫停告知功能)
#print("ready!")
"""
主程式
功能:
啟動時LED亮滅各1.5秒
當SW1觸發:使LED規律地亮0.3秒、滅0.3秒共3次,並在Shell上顯示SW1 pressed!
當SW2觸發:在Shell上顯示SW2 pressed!
當SW1、SW2皆觸發:在Shell上顯示All Pressed!
"""
LED.value(1)
time.sleep(1.5)
LED.value(0)
time.sleep(1.5)
while True:
if(key_scan()==1):
time.sleep_ms(20) #忽略彈跳週期
if(key_scan()==1):
print("SW1 pressed!")
LED_shine(3)
while(key_scan()==1): #確保按鍵已放開,未放開:不動作
pass
elif(key_scan()==2):
time.sleep_ms(20) #忽略彈跳週期
if(key_scan()==2):
print("SW2 pressed!")
while(key_scan()==2): #確保按鍵已放開,未放開:不動作
pass
elif(key_scan()==3):
time.sleep_ms(20) #忽略彈跳週期
if(key_scan()==3):
print("All Pressed!")
while(key_scan()==3): #確保按鍵已放開,未放開:不動作
pass