Lua ESP8266 tmr问题。

我正在忙于开发一个我的 ESP-03 将控制的调光灯。但是我阅读的内容,我有一个问题。请查看我的代码,然后我会解释:

我的问题在于,当在脚本底部启动 tmr.alarm() 时......但是,在函数 zero_cross() 下使用 tmr.delay,这似乎使 tmr.alarm() 不再起作用。所有发生的事情都是 ESP 不断重新启动。如果我分开运行上述代码(只是调光功能或只是 sendData 功能),那么一切都完美运行。有人有什么建议吗?

点赞
用户1786243
用户1786243

Nodemcu 可以直接从硬件中断中调用 Lua 回调函数(参见 https://github.com/nodemcu/nodemcu-firmware/blob/master/app/modules/tmr.c#L114),但需要使用 luahook(参见 https://github.com/elua/elua/blob/master/src/elua_int.c),因为 Lua 不直接支持中断,必须模拟实现,这很可能是危险的。

解决方案:同时只使用一个中断:

local send_time, last_gpio
last_gpio = gpio.read(6)
send_time = 0

tmr.trigger(1, 10, 1, function()
    if (gpio.read(6) == 1 and last_gpio == 0) then
        last_gpio = 1
        zero_cross()
    else if (gpio.read(6) == 0 and last_gpio == 1)
        last_gpio = 0
    end

    send_time = send_time + 1

    if (send_time > 100) then
        send_data()
    end
end)
2015-12-05 04:08:42