注意:这是此处问的问题的副本
hi
我是EPS8266和LUA的新手(但不是编程 - 我的第一个CPU是8080 ...)
使用Adafruit的Nodemcu Huzza
无论如何,我正在测试一些计时器并遇到这一点:
tmr.alarm(0, 500, 1, function()
print("I'm here")
tmr.stop(0)
end)
没有停止,循环不断打印, tmr.stop(0)
停止。...到目前为止还不错。
但是,如果我想再次启动计时器:
tmr.alarm(0, 500, 1, function()
print("I'm here")
tmr.stop(0)
-- do some stuff
tmr.start(0)
end)
我有一个错误: PANIC: unprotected error in call to Lua API...
该文档说tmr
仍在调用stop
时已注册。
呼叫tmr.state(0)
也这样做。
tmr.stop(0)
起作用。
感谢您的想法。
文档说不再使用静态计时器
静态计时器被弃用,以后将删除。使用使用
tmr.create()
启动的OO API。
如果您想完全控制计时器回调中的函数,则需要在需要时拨打start
的ALARM_SEMI
实例。每当您在其上致电start
时,它都会完全发射。
local mytimer = tmr.create()
mytimer:register(500, tmr.ALARM_SEMI, function() print("I'm here") end)
-- do stuff here
-- then whenever needed trigger the timer
mytimer:start()
请注意,mytimer
没有未注册,也没有收集垃圾。
基于文档,您需要将tmr.alarm_semi用作警报模式。
alarm_semi由文档描述为:
tmr.alarm_semi手动重复警报(请致电tmr.start() 重新启动)
tmr.alarm_semi等于2。基于此,这应该有效:
tmr.alarm(0, 500, 2, function()
print("I'm here")
tmr.stop(0)
-- do some stuff
tmr.start(0)
end)