定期计时器运行一次,然后出错

问题描述 投票:0回答:2

在 Raspberry Pi Pico v1.19.1 上,当我定义计时器时,第一次执行工作正常。然而随后的周期会失败:

'TypeError:'NoneType'对象不可调用

import machine, time
from machine import Timer


class app():
    def __init__(self):
        self.pulse = machine.Timer(-1)
        self.pulse.init(mode=Timer.PERIODIC, period=1000, callback=self.cb_pulse())

    def cb_pulse(self):
        print("whai!")

app()
timer nonetype micropython raspberry-pi-pico rp2040
2个回答
1
投票

您必须自己指定回调函数,因此无需

()

# Good 
self.pulse.init(mode=Timer.PERIODIC, period=200, callback=self.cb_pulse)
# Bad
self.pulse.init(mode=Timer.PERIODIC, period=200, callback=self.cb_pulse())

通过添加

()
,您实际上是将回调方法的结果/输出传递给计时器。 由于它什么也没有返回 ==
None
,所以计时器尝试调用“None”,这确实不是可调用的。

模拟器中的工作示例:https://wokwi.com/projects/354050429354521601


0
投票

这是我能找到的唯一可以与 Micropython 一起使用的东西,它们可以为我提供任何计时器功能。但它非常适合我需要它的用途,即制作一秒滴答计数器。这样我就可以测量 WOKWI Online 模拟器内的时间。

jsjtick=1
def  tickjsj():
    global jsjtick
    jsjtick=jsjtick+1
machine.Timer().init(period=1000, callback=lambda t:tickjsj())

#redundantly display the time in the terminal
jsjtick2=0
while 1:
    if jsjtick!=jsjtick2
      print(" "*33,(13),end="","uptime=",jsjtick,chr,(13),end="")
      jsjtick!=jsjtick2
© www.soinside.com 2019 - 2024. All rights reserved.