nodemcu с луа и 8266 тмр.стоп - PullRequest
       54

nodemcu с луа и 8266 тмр.стоп

0 голосов
/ 18 декабря 2018

Примечание: это копия вопроса, заданного здесь

Привет

Я совершенно новичок в EPS8266 и Lua (но не в программировании - мой первый процессорбыло 8080 ...)
Использование nodemcu HUZZA от adafruit

В любом случае я проверяю некоторые вещи таймера и сталкиваюсь с этим:

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), кажется, работает как положено.

Спасибо за ваши мысли.

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

В документации сказано, что больше не используются статические таймеры

Статические таймеры устарели и будут удалены позже.Используйте OO API, инициированный с tmr.create().

. Если вы хотите получить полный контроль над выполнением функций в обратном вызове таймера, вам необходим экземпляр ALARM_SEMI, для которого вы вызываете start при необходимости.,Он будет срабатывать ровно один раз при каждом вызове 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 не является незарегистрированным и не является сборщиком мусора.

0 голосов
/ 19 декабря 2018

На основании документации вам необходимо использовать 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)
...