from machine import ADC, Pin
import time
from neopixel import NeoPixel
# ------------------- 硬件引脚配置 -------------------
# 光敏传感器:ESP32-S3 的 14 号引脚
adc_pin = Pin(14)
adc = ADC(adc_pin)
adc.atten(ADC.ATTN_11DB) # 0~3.3V 量程
adc.width(ADC.WIDTH_12BIT) # 12位精度,0~4095
# WS2812 环形灯配置(按你的实际硬件修改)
led_pin = Pin(16, Pin.OUT) # 数据引脚
num_leds = 16 # 灯珠数量
np = NeoPixel(led_pin, num_leds)
# ------------------- 亮度范围配置 -------------------
# 强光(ADC低)→ 弱亮度;弱光(ADC高)→ 强亮度
MIN_BRIGHTNESS = 10 # 最暗时的亮度(防止完全熄灭)
MAX_BRIGHTNESS = 255 # 最亮时的亮度
# ------------------- 主循环:线性平滑调光 -------------------
while True:
# 读取光敏传感器ADC值(0~4095)
adc_value = adc.read()
# 线性映射:ADC值 → 亮度值(反向映射,光线越暗灯越亮)
# 公式:亮度 = MIN_BRIGHTNESS + (MAX_BRIGHTNESS - MIN_BRIGHTNESS) * (adc_value / 4095)
brightness = int(MIN_BRIGHTNESS + (MAX_BRIGHTNESS - MIN_BRIGHTNESS) * (adc_value / 4095))
# 边界保护(防止超出 0~255 范围)
brightness = max(MIN_BRIGHTNESS, min(MAX_BRIGHTNESS, brightness))
# 设置所有灯珠为当前亮度的白色
for i in range(num_leds):
np[i] = (brightness, brightness, brightness)
np.write()
# 串口调试信息
print(f"ADC值: {adc_value}, 亮度: {brightness}")
# 适当延时,避免占用过高
time.sleep(0.05)