#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 будет недоступен.
Я дам вам знать. 😉