我想生成两个变频脉冲序列,使用ESP8266步进一对步进电机。新的gpio.pulse模块似乎是理想的,但我无法理解NodeMCU documentation中提供的一些信息:
我知道从表中构建了一个指令数组,但所描述的参数count
和loop
很难理解。
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
应该做什么感到困惑?
答案 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,那么脉冲输出就不起作用了。我将修复代码,以便不需要这样做。对不起。