Можно ли установить непрерывный цикл с помощью gpio.pulse ()? - PullRequest
0 голосов
/ 05 сентября 2018

Кто-нибудь знает способ заставить модуль ESP8266 NodeMCU gpio.pulse работать в непрерывном цикле?

У меня есть требование непрерывно выводить две прямоугольные волны с устойчивой частотой, которые не совпадают по фазе на 180 ° от выводов ESP8266 GPIO4 и GPIO5. На первый взгляд пример документа модуля 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), чтобы сбросить параметр "count = 20" в примере 2 шага до того, как он достигнет нуля, но это не сработало.

1 Ответ

0 голосов
/ 08 сентября 2018

В этом случае вы можете использовать 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 импульсов перед завершением.

...