循环的含义&计算新NodeMCU gpio.pulse模块中的参数

时间:2018-02-14 15:14:55

标签: lua esp8266 nodemcu

我想生成两个变频脉冲序列,使用ESP8266步进一对步进电机。新的gpio.pulse模块似乎是理想的,但我无法理解NodeMCU documentation中提供的一些信息:

  • 计数和循环允许简单循环。当一个状态有计数和循环 完成后,下一个状态处于循环状态(假设计数没有 递减到零)。第一个州是州1.

我知道从表中构建了一个指令数组,但所描述的参数countloop很难理解。

pulser = gpio.pulse.build( {
  { [1] = gpio.HIGH, [2] = gpio.LOW, delay=100000 },
  { [1] = gpio.LOW, [2] = gpio.HIGH, delay=100000, loop=1, count=100, min=90000, max=110000 }
})

如果我尝试运行docs中给出的上述示例,gpio2会产生一个周期为200ms的方波,持续100个周期(20秒)。这部分似乎有意义,但gpio1一直保持低位。该示例没有描述期望的内容。

如果我通过将loop设置为2来稍微进行一些实验,则两个输出都会变高并保持高电平10秒(当pulser:start回调触发时)。这让我对loop应该做什么感到困惑?

1 个答案:

答案 0 :(得分:1)

loop键就像一个goto - 它指定下一步应该是什么。如果loop = 1,则它按以下顺序有效地运行步骤:1,2,1,2,1,2,....

但是,如果loop=2则按顺序运行步骤:1,2,2,2,2,2,

在您给出的示例中,引脚1应该是与引脚2相反的方波。另一个要检查的是您将引脚1配置为输出。

今晚我会尝试你的例子并回复你......

...时间过去......

我试过

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

gpio.write(1, gpio.LOW)
gpio.write(2, gpio.LOW)

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)

我的输出连接到D1和D2上的几个LED,它们闪烁得很好(不同相)。

然而,似乎如果你不在引脚上至少使用一次gpio.write,那么脉冲输出就不起作用了。我将修复代码,以便不需要这样做。对不起。