是否可以使用gpio.pulse()设置连续循环?

时间:2018-09-05 01:52:42

标签: lua esp8266 nodemcu

有人知道让ESP8266 NodeMCU gpio.pulse 模块连续运行的方法吗?

我需要连续输出两个与ESP8266的GPIO4和GPIO5引脚相位相差180°的稳定频率方波。乍一看, gpio.pulse() [gpio.pulse.build()]模块文档示例(https://nodemcu.readthedocs.io/en/master/en/modules/gpio/#gpiopulsebuild)似乎符合我的要求。不幸的是,我找不到连续循环运行的方法。

gpio.mode(1, gpio.OUTPUT)
gpio.mode(2, gpio.OUTPUT)

pulser = gpio.pulse.build( {
  { [1] = gpio.HIGH, [2] = gpio.LOW, delay=250000 },
  { [1] = gpio.LOW, [2] = gpio.HIGH, delay=250000, loop=1, count=20, min=240000, max=260000 }
})

pulser:start(function() print ('done') end)

我尝试使用gpio.pulse:update(https://nodemcu.readthedocs.io/en/master/en/modules/gpio/#gpiopulseupdate)在该示例的步骤2的“ count = 20”参数达到零之前将其重置,但这没有用。

1 个答案:

答案 0 :(得分:0)

在这种情况下,您可以使用count = -1(最大可能的32位无符号整数),这会使它运行68年左右。

对于不满足2 ^ 32次重复的较高频率,则可以嵌套循环:

pulser = gpio.pulse.build( {
  { [1] = gpio.HIGH, [2] = gpio.LOW, delay=250000 },
  { [1] = gpio.LOW, [2] = gpio.HIGH, delay=250000, loop=1, count=20, min=240000, max=260000 },
  { loop=1, count=20 }
})

这将在终止之前运行20 * 20个脉冲。