"""
写一个流水灯,赤橙黄绿,线材对应相应的颜色,采取不同的颜色按钮对应不同的功能,
粉色为加速,蓝色为减速,白色为默认,并且把相应的ID改为对应的按键名。
整体流程就是:主程序是定时器流水灯的闪烁,中断服务是时间的控制,
运行顺序是从头到尾之后,通过定时器的调用来运行不同是函数。
"""
from machine import Pin, Timer
# 定义流水灯
SPEED = 1000 # 控制频率
"""
配置在引脚的触发源处于活动状态时调用的中断处理程序。
如果引脚模式是 Pin.IN 则触发源是引脚上的外部值。
如果引脚模式是 Pin.OUT 则触发源是引脚的输出缓冲器。
如果引脚模式是 Pin.OPEN_DRAIN 那么触发源是状态'0'的输出缓冲器和状态'1'的外部引脚值。
"""
leds = [Pin(i, Pin.OUT) for i in range(4, 8)] # 创建流水灯列表
timer_s = Timer(0) # 构建定时器,创建控制速度对象。
i = 0 # 控制灯的循环
def twinkle(t): # 定义闪烁函数
global i # 设置全局变量i, 用于切换LED
print("SPEED={}".format(SPEED)) # 打印LED闪的速度
leds[i % 4].value(1 - leds[i % 4].value()) # 切换LED
i = i + 1
def default(t): # 定义一个默认速度的函数
global SPEED # 设置全局变量SPEED, 用于调节LED闪的速度
SPEED = 500 # 定义默认速度
timer_s.init(period=SPEED, mode=Timer.PERIODIC, callback=twinkle) # 定时器初始化,接收指定的速度周期性的回调闪灯函数。
# 定时器的调用,每个函数都要有才可以在运行函数时处理定时器
def up(t): # 定义一个加速的函数
global SPEED # 设置全局变量SPEED, 用于调节LED闪的速度
if SPEED >= 100: # 设置加速后的速度
SPEED = SPEED // 2 # 加速的速度
timer_s.init(period=SPEED, mode=Timer.PERIODIC, callback=twinkle) # 定时器初始化,接收指定的速度周期性的回调闪灯函数
def down(t): # 定义一个减速的函数
global SPEED # 设置全局变量SPEED, 用于调节LED闪的速度
if SPEED < 1000: # 设置减速后的速度
SPEED = SPEED * 2 # 减速的速度
timer_s.init(period=SPEED, mode=Timer.PERIODIC, callback=twinkle) # 定时器初始化,接收指定的速度周期性的回调闪灯函数
"""
# period:周期时间(单位为ms)
# mode:工作模式,有 Timer.ONE_SHOT(执行一次)和 Timer.PERIODIC(周期性执行)两种
# callback:定时器中断的回调函数
"""
btn_default = Pin(13, Pin.IN, Pin.PULL_UP) # 定义默认按钮,pin 脚模式为输入,上拉
btn_Up = Pin(12, Pin.IN, Pin.PULL_UP) # 定义加速按钮,pin 脚模式为输入,上拉
btn_down = Pin(14, Pin.IN, Pin.PULL_UP) # 定义减速按钮,pin 脚模式为输入,上拉
btn_default.irq(trigger=Pin.IRQ_RISING, handler=default) # 默认按钮的中断,触发模式为上升沿中断,在中断触发时调用默认速度函数
btn_Up.irq(trigger=Pin.IRQ_RISING, handler=up) # 加速按钮的中断,触发模式为上升沿中断,在中断触发时调用加速函数
btn_down.irq(trigger=Pin.IRQ_RISING, handler=down) # 减速按钮的中断,触发模式为上升沿中断,在中断触发时调用减速函数
timer_s.init(period=SPEED, mode=Timer.PERIODIC, callback=twinkle) # 定时器初始化,接收指定的速度周期性的回调闪灯函数
"""
irq 中断回调参数:
# handler 是一个可选的函数,在中断触发时调用
# trigger 配置可以触发中断的事件。可能的值是:
# Pin.IRQ_FALLING 下降沿中断
# Pin.IRQ_RISING 上升沿中断
# Pin.IRQ_RISING_FALLING 上升沿或下降沿中断
# Pin.IRQ_LOW_LEVEL 低电平中断
# Pin.IRQ_HIGH_LEVEL 高电平中断
"""
Loading
esp32-s3-devkitc-1
esp32-s3-devkitc-1