from machine import ADC, Pin, PWM, deepsleep # 從machine模組引入ADC, Pin, PWM類以及deepsleep函數
import time # 導入time模組
adc = ADC(Pin(4)) # ADC初始化,將GPIO4設為ADC輸入
sw1 = Pin(15, Pin.IN, Pin.PULL_UP) #使用Pin物件,將GPIO15設定為輸出,啟用上升電阻
sw2 = Pin(3, Pin.IN, Pin.PULL_UP) # 使用Pin物件,將GPIO3設定為輸出,啟用上升電阻
led = PWM(Pin(20)) #使用Pin物件,將GPIO20設定為輸出
led.freq(1000) # 設置PWM頻率為1000Hz
adc_enabled = False # 設置一個標誌變量,用於控制ADC讀取功能的開啟和關閉
#12~17行使用def定義讀取ADC函數
def adc_read():
if adc_enabled:
adc_value = adc.read_u16()
duty_cycle = (65535 - adc_value) // 64
led.duty(duty_cycle)
#20~24行用def定義處理sw1按鈕壓下事件的函數
def sw1_pressed(pin):
global adc_enabled
adc_enabled = not adc_enabled
if not adc_enabled:
led.duty(0) #假設ADC功能未被使用,關閉LED
#28~30行定義處理sw2按鈕壓下事件函數
def sw2_pressed(pin):
print("End Program!") #在stell上顯示End Program!
deepsleep() #結束程式
#34、35行為sw1和sw2設置中斷觸發條件和處理函數
sw1.irq(trigger=Pin.IRQ_FALLING, handler=sw1_pressed)
sw2.irq(trigger=Pin.IRQ_FALLING, handler=sw2_pressed)
while True:
adc_read() # 嘗試讀取ADC值
time.sleep(0.1) # 短暫延時,以減緩循環速度