from machine import Pin, PWM, Timer
from micropython import const
LED_DUTY_MAX = const(65535)
LED_DUTY_MIN = const(0)
LED_TIMER_INVL = const(20) # 占空比调节定时器的定时间隔,单位ms,不能为0
LED_BREATH_INVL = const(2000) # 呼吸灯从ON->OFF的时间,单位ms.不能为0
timer_led = Timer(0)
breathled = PWM(Pin(2), freq=500, duty_u16=0)
calc_cache = 0
led_duty_invl = int((LED_DUTY_MAX - LED_DUTY_MIN) // (LED_BREATH_INVL // LED_TIMER_INVL))
led_duty = 0 # 占空比
def led_duty_handle(t):
"""
led灯占空比调节的函数
:return:
"""
global led_duty, calc_cache, led_duty_invl
if calc_cache:
led_duty += led_duty_invl
if led_duty > LED_DUTY_MAX:
calc_cache = False
led_duty = LED_DUTY_MAX
else:
led_duty -= led_duty_invl
if led_duty < LED_DUTY_MIN:
calc_cache = True
led_duty = LED_DUTY_MIN
breathled.duty_u16(led_duty)
def ledctrl_ledon():
timer_led.init(period=LED_TIMER_INVL,
mode=Timer.PERIODIC,
callback=led_duty_handle) # 占空比调节的定时器
def ledctrl_ledoff():
timer_led.deinit()
breathled.duty_u16(0)
if __name__ == '__main__':
import time
lednow = False
def btnhandle():
global lednow
if btn.value() == 0:
time.sleep_ms(20)
if btn.value() == 0:
if not lednow:
ledctrl_ledon()
lednow = True
print("btn ctrl led on")
else:
ledctrl_ledoff()
lednow = False
print("btn ctrl led off")
while btn.value() == 0:
time.sleep_ms(10)
btn = Pin(0, Pin.IN, Pin.PULL_UP)
print("program start")
while True:
time.sleep_ms(100)
btnhandle()