from machine import Pin, PWM, ADC #引入module:machine,在此只引入"Pin,PWM,ADC"功能
import time #引入module:time
SW1 = Pin(15,Pin.IN, Pin.PULL_UP) #GPIO.15設定為輸入接腳,使用內建上拉電阻,定義名稱:SW1
SW2 = Pin(3,Pin.IN, Pin.PULL_UP) #GPIO.3設定為輸入接腳,使用內建上拉電阻,定義名稱:SW2
LED1_42 = Pin(42,Pin.OUT) #GPIO.42設定為輸出接腳,定義名稱:LED
ADC1_9 = ADC(9) #GPIO.9設定為ADC接腳,定義名稱:ADC1_9
LED = PWM(LED1_42)
LED.duty(0)
i=0 #按鍵計數
"""
名稱:read_adc
功能說明:將選定之ADC接口做讀值並於SHELL上做顯示
細項:
ADC_channel將使用此函式時指定之ADC接口做指向,當ADC接口多時可重複使用此功能,
因PWM的Duty Cycle只接受0~1023,但ADC接口最大到4095,但又因運算子:/為無條件捨去,在此可直接除4轉至0~1023,
後將讀出數值顯示在SHELL上並回傳數值。
"""
def ADC_Read(ADC_channel):
value = ADC_channel.read()
value = int(value/4)
print("Now read ADC Voltage is,", str(value))
return value
"""
名稱:SW_Scan
功能說明:將觸發之按鍵做防止彈跳
細項:
sw_name將使用此函式時指定之輸入接口做指向,當接口多時可重複使用此功能,
按鍵判讀為低態時隔20ms複測,如果還為低態則繼續檢測按鍵是否改變為高態,如果為高態隔20ms複測在為高態時則回傳1,
當以上不成立時則回傳0
"""
def SW_Scan(sw_name):
if(sw_name.value() == 0):
time.sleep_ms(20)
if(sw_name.value()==0):
while True:
if(sw_name.value()==1):
time.sleep_ms(20)
if(sw_name.value()==1):
break
return 1
return 0
"""
主程式
功能:
功能1:當奇數次按下SW1時開始ADC程式,當偶數次按下SW1時關閉ADC程式
功能2:當按下SW2時,在Shell上顯示End Program!並關閉整個程式
題目要求:ADC電壓越高,LED亮度越低。
"""
while True:
if(SW_Scan(SW1)==1):
i=i+1
print("now has pressed", i, "times.")
if(SW_Scan(SW2)==1):
print("End Program!")
break
if(i%2==1):
LED.duty(1023 - ADC_Read(ADC1_9))
time.sleep_ms(50)
else:
LED.duty(0)
time.sleep_ms(1)