Зуммер, издающий странный скрежещущий звук в Node.js

#python #node.js #raspberry-pi #raspberry-pi3

#python #node.js #raspberry-pi #raspberry-pi3

Вопрос:

В последнее время я возился с Node.js , кнопки dash и Raspberry Pi GPIO. Я вроде как новичок во всей сцене GPIO, поэтому я возился с этим. У меня есть зуммер, подключенный к макету, и я запустил его с помощью Python, вот так:

 while True:    
    GPIO.output(18, True)
    time.sleep(0.001)
    GPIO.output(18, False)
    time.sleep(0.001)
  

Это работает довольно хорошо. Зуммер звучит нормально. Однако мой Node.js сценарий заставляет зуммер издавать странный скрежещущий звук. Я сделал это так:

 var Gpio = require('onoff').Gpio;
var sleep = require('sleep');
var buzz = new Gpio(18, 'out');
for (var i = 0; i < 800; i  ) {
    buzz.writeSync(1);
    sleep.usleep(1);
    buzz.writeSync(0);
    sleep.usleep(1);
};
  

( i < 800 это просто, сколько раз он будет гудеть, чтобы создать эффект зуммера)

По какой-то причине Node.js скрипт издает странный скрежещущий звук по сравнению с равномерным звуком, похожим на зуммер, который издает скрипт Python. Заранее большое спасибо. Помощь приветствуется.

Комментарии:

1. что произойдет, если вы измените 800 на 80 или 8? у вас может возникнуть некоторый эффект обратной связи.

Ответ №1:

Узел использует систему цикла событий. Когда вы приказываете ему спать, вы на самом деле говорите: «Будь свободен! Делайте все, что вам еще нужно, и продолжайте проверять, есть ли у меня для вас еще какая-нибудь работа «. Затем, по истечении заданного вами времени, он добавляет задание в очередь, и малина подберет его и выполнит.

Проблема с этим заключается в том, что pi не может быть очень точным таким образом. Вы освобождаете процессор и можете воспроизвести следующий тик только тогда, когда процессор вернется к вам. Это может меняться каждый раз и, вероятно, приводит к звуку скрининга.

Я собираюсь попробовать другой подход и опубликовать свои выводы, но я подозреваю, что удержание процессора даст лучшие результаты: — У узла есть гораздо более точный вызываемый таймер process.hrtime , который окажется полезным. — Я начну бесконечный цикл и использую hrtime, чтобы контролировать, когда ставить галочку. — Это может пойти плохо и привести к тому, что pi будет недоступен.

Я дам вам знать. 😉