from machine import Pin, ADC,Timer
import math
# 初始化 ADC,Pin=33,11DB 衰减,测量电压 0-3.3V,默认12位
ps2_y = ADC(Pin(33)) # Pin33接A0
ps2_y.atten(ADC.ATTN_11DB) # 这里配置测量量程为3.3V
# 数字量
p15 = Pin(15, Pin.IN) # Pin15接D0
#设置GAMMA和RL10
GAMMA = 0.7
RL10 = 50
Ro = 10000 #串联的固定电阻10k
Vcc =3.3 #电源电压3.3V
#定时器回调函数,将analogRead()的返回值转换为照明值(勒克斯)
def get_lux(tim):
analogValue = ps2_y.read() # 模拟量范围0-4095。数字值越小,表示当前环境光的亮度越大,否则越小
voltage = analogValue / 4096. * Vcc
resistance =Ro*voltage/(Vcc-voltage)
lux = math.pow(RL10 * 1e3 * math.pow(10, GAMMA) / resistance, (1 / GAMMA))
print("analogValue:",analogValue,"voltage:",voltage,"resistance:",resistance,"lux:",lux)
#定时器回调函数,测试有没有光,确定光线是否充足
def determine_light(tim):
val_y = ps2_y.read() # 模拟量范围0-4095。数字值越小,表示当前环境光的亮度越大,否则越小
light = p15.value() # 数字量0,1。数字0表示有光,1表示没有光
print(val_y, light)
if val_y < 2600 and light == 0:
print("光线充足。。。")
else:
print("光线弱。。。")
#开启 RTOS 定时器
tim = Timer(-1)
tim.init(period=2000, mode=Timer.PERIODIC, callback=get_lux) #周期 2s
#测试有没有光,确定光线是否充足,可以启用下面的代码
#开启 RTOS 定时器
#tim = Timer(-1)
#tim.init(period=2000, mode=Timer.PERIODIC, callback=determine_light) #周期 2s