使用计时器的好处,是实现类似并行处理的功能,也就是一个应用里只能有一个while
True,两个以上都是不可以的;但是如果使用计时器,就可以同时运行多个while
True,这和Arduino的void 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, Timer import time
#PICO的LED在GPIO25上;PICOW,GPIO0 LED = 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_SHOT tim1 = Timer() tim1.init(period=5000, mode = Timer.ONE_SHOT, callback = Flash_LED)
#tim2开启之后一直嗷嗷跑,直到被关掉Timer.PERIODIC tim2 = 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) '''
|