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

我想使用ESP8266生成两个可变频率的脉冲训练来步进一对步进电机。新的gpio.pulse模块似乎非常理想,但我无法理解NodeMCU文档中提供的一些信息:

  • 计数和循环允许简单的循环。当计有计数和循环的状态完成时,下一个状态在循环处(前提是计数未减至零)。第一个状态是状态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 }
})

如果我尝试运行文档中提供的上面的示例,gpio2会产生一种持续100个周期(20秒)的周期为200ms的方波。这在某种程度上似乎是有意义的,但gpio1始终保持低电平。例子没有描述期望什么。

如果我尝试将loop设置为2来尝试一下,两个输出都变高,并保持高10秒钟(当pulser:start回调时)。这让我困惑loop应该怎么做?

点赞
用户6345462
用户6345462

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在引脚上至少一次,则脉冲输出不起作用。我会修复代码,这样就不需要了。对此我很抱歉。

2018-02-15 13:50:23