from machine import Pin, ADC
from time import sleep
# 1. 初始化光敏電阻 (ADC 類比轉數位)
# 類比訊號就像是無段落的音量旋鈕,ADC 負責把電壓轉換成 0~4095 的數字
light_adc = ADC(Pin(35))
light_adc.atten(ADC.ATTN_11DB) # 設定讀取範圍為 0~3.3V (重要:確保能讀到最大值 4095)
# 2. 初始化 5 顆 LED (設定為輸出模式 OUT)
led1 = Pin(15, Pin.OUT)
led2 = Pin(16, Pin.OUT)
led3 = Pin(17, Pin.OUT)
led4 = Pin(18, Pin.OUT)
led5 = Pin(19, Pin.OUT)
print("系統啟動:5段式光感應燈開始運作!")
# 3. 進入無窮迴圈,不斷偵測光線
while True:
# 讀取當前的光線數值 (ESP32 的解析度為 12-bit,數值範圍 0 ~ 4095)
# 數值越小代表越亮,數值越大代表越暗
light = light_adc.read()
print("目前光線數值 (0-4095):", light)
# 稍微暫停,避免讀取過快導致當機
sleep(0.2)
# 4. 根據光線數值,決定點亮幾顆燈 (5 段式判斷)
# 以下區間數值可以依照實際環境需求自行微調
if light < 500:
# 第 1 段:非常亮,全部熄滅
led1.value(0); led2.value(0); led3.value(0); led4.value(0); led5.value(0)
elif light < 1200:
# 第 2 段:稍微變暗,亮 1 顆燈
led1.value(1); led2.value(0); led3.value(0); led4.value(0); led5.value(0)
elif light < 2000:
# 第 3 段:普通亮度,亮 2 顆燈
led1.value(1); led2.value(1); led3.value(0); led4.value(0); led5.value(0)
elif light < 2800:
# 第 4 段:偏暗,亮 3 顆燈
led1.value(1); led2.value(1); led3.value(1); led4.value(0); led5.value(0)
elif light < 3500:
# 第 5 段:很暗,亮 4 顆燈
led1.value(1); led2.value(1); led3.value(1); led4.value(1); led5.value(0)
else:
# 第 6 段:非常暗 (大於等於 3500),5 顆燈全亮!
led1.value(1); led2.value(1); led3.value(1); led4.value(1); led5.value(1)