分享

学习micropython定时器

 新用户5228KeDY 2023-02-02 发布于北京

使用计时器的好处,是实现类似并行处理的功能,也就是一个应用里只能有一个while True,两个以上都是不可以的;但是如果使用计时器,就可以同时运行多个while True,这和Arduinovoid loop()是类似的,实际Arduino也有timer库和timer1库。Micropython下的machine库的Timer是一个类,在文档(Jan 28,2023)的位置:

MicroPython libraries/

MicroPython-specific libraries/

machine - functions related to the hardware/

class Timer - control hardware timers

只有两个函数,一个初始化,一个取消初始化。

1、初始化Timer.init(*, mode=Timer.PERIODIC, freq=- 1, period=- 1, callback=None)

参数:Timer.ONE_SHOT,运行一次拉倒,Timer.PERIODIC周期性运行。freq单位Hz period单位milliseconds。当频率和周期同时被设置时,周期被忽略,以频率为准。callback回调函数。

2、销毁Timer.deinit()

测试:

代码:

#---------------------------------------------------------#参考https://www./blogs/tutorials/tutorials-for-rpi-pi-pico-with-micropython-code#----------------------------------------------------------from machine import Pin, Timerimport time
#PICO的LED在GPIO25上;PICOW,GPIO0LED = Pin(25, Pin.OUT)n=0#while,一旦有亮的LED,确保关掉while LED.value()==1: LED.value(0) #回调函数至少有一个参数def Flash_LED(t1): LED.value(not LED.value()) print('LED')
def INC(t2): global n n=n+1 if n<10 else 0 print(n)
#朴素的用法,tim1运行一次就失效Timer.ONE_SHOTtim1 = Timer()tim1.init(period=5000, mode = Timer.ONE_SHOT, callback = Flash_LED)
#tim2开启之后一直嗷嗷跑,直到被关掉Timer.PERIODICtim2 = Timer() tim2.init(freq = 2, mode = Timer.PERIODIC, callback = INC)
#True循环和Timer不打架while True: if LED.value()==1: time.sleep(3) #杀死tim2 tim2.deinit() #关灯 LED.off()
'''#若只用一个计时器,或者不期望以后再关掉,对象也不用声明,直接初始化Timer(period=5000, mode = Timer.ONE_SHOT, callback = Flash_LED)Timer(freq = 2, mode = Timer.PERIODIC, callback = INC)'''

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多