我想生成两个可变频率脉冲列车,以使用ESP8266来启动一对步进电动机。新的gpio.pulse模块似乎是理想的选择,但我无法理解nodemcu文档中提供的一些信息:
- 计数和循环允许简单的循环。当一个有计数和循环的状态已完成,下一个状态处于循环状态(前提是计数尚未减少到零(。第一个状态是状态1。
我知道从表中构建了一系列教学,但是所描述的参数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 }
})
如果我尝试运行上述文档中给出的示例,则GPIO2会产生一个200ms周期的方波,持续100个周期(20秒(。这部分似乎很有意义,但是GPIO1一直保持较低。该示例没有描述期望的。
如果我仅通过将loop
设置为2进行实验,则两个输出均高高,并且保持高10秒(当pulser:start
回调发射时(。这让我对loop
应该做什么感到困惑?
loop
键就像一个goto - 它指定了下一步应该是什么。如果loop = 1
,则可以按以下顺序有效地运行这些步骤:1,2,1,2,1,2,....
但是,如果loop=2
,则以顺序运行步骤:1,2,2,2,2,2,
在您给出的示例中,引脚1应该是一个与引脚的相对阶段的方波。另一个要检查的东西是您将引脚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,则脉冲输出不起作用。我将修复代码,以便不需要。对此很抱歉。