1 2 3 4 |
tmr.alarm(0, 1000, tmr.ALARM_AUTO, func(par1, par2)) stdin:1: attempt to call field 'alarm' (a nil value) stack traceback: stdin:1: in main chunk |
Відповідь:
Починаючи з версії NodeMCU 2.2.1-master_20190405, підтримуються лише іменовані таймери, а індексовані (0-n) таймери не підтримуються.
Джерело: https://github.com/nodemcu/nodemcu-firmware/tree/2.2.1-master_20190405
Цитата: “Breaking changes. Removed index-based timers that have been deprecated for a long time, #2603”.
Аналогічним чином не буде працювати метод tmr.stop(0), або будь-яка інша, аналогічна команда, де потрібно вказати ім’я таймера.
У запитанні наведено застарілий формат створення таймерів. Спробуйте замість методу tmr.alarm()
застосовувати формат tmr.create():alarm(1000, tmr.ALARM_AUTO, func(par1, par2))
для швидкого утворення таймеру “на льоту”. Якщо ж вам потрібен повний формат об’явлення таймеру, то використовуйте у коді наступний, об’єктний формат:
1 2 3 |
tmr_obj_name = tmr.create() tmr_obj_name:register(1000, tmr.ALARM_AUTO, function() … end) tmr_obj_name:start() |
Для зупинки таймера, відповідно буде працювати tmr_obj_name:stop()
.