from machine import ADC, Pin, PWM
import time
# ------------------- 硬件引脚定义(和你的接线完全对应) -------------------
# 光敏模块
# AO(模拟量)接GPIO4,DO(数字量)接GPIO15
adc_pin = Pin(4) # 光敏模块AO(模拟量)
do_pin = Pin(15, Pin.IN) # 光敏模块DO(数字量)
# LED定义
# 照明LED(开关控制)接GPIO12,调光LED(PWM控制)接GPIO8
light_led = Pin(12, Pin.OUT) # 照明LED(红)
dimmer_led = PWM(Pin(8), freq=1000) # 调光LED(绿,PWM)
# ------------------- ADC初始化(读取模拟量) -------------------
adc = ADC(adc_pin)
adc.atten(ADC.ATTN_11DB) # 配置测量范围0~3.3V
adc.width(ADC.WIDTH_12BIT) # 配置12位分辨率(0~4095)
# ------------------- 主循环 -------------------
while True:
# 1. 读取光敏模块数据
raw_value = adc.read() # 读取模拟量原始值(0~4095)
voltage = raw_value * 3.3 / 4095 # 换算为电压(单位:V)
do_state = do_pin.value() # 读取数字量状态(0/1)
# 2. 任务①:照明LED控制(环境光暗到阈值点亮,天亮熄灭)
# 逻辑:光弱时DO输出高电平,点亮LED;光强时DO输出低电平,熄灭LED
if do_state == 1:
light_led.on()
else:
light_led.off()
# 3. 任务②:调光LED控制(环境光越暗,LED越亮)
# 把0~4095的模拟值反向映射为0~1023的PWM占空比
# 模拟值越大(光越亮),占空比越小,LED越暗;反之越亮
duty = 1023 - int(raw_value / 4095 * 1023)
dimmer_led.duty(duty)
# 打印调试信息
print(f"ADC原始值: {raw_value:4d} | 电压: {voltage:.2f}V | DO状态: {do_state} | 占空比: {duty}")
time.sleep(0.1) # 延时0.1秒,稳定采样