nodemcu with Lua and 8266 tmr.stop



注意:这是此处问的问题的副本

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。

如果您想完全控制计时器回调中的函数,则需要在需要时拨打startALARM_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)

最新更新