蜂鸣器在 Node.js 中发出奇怪的尖叫声

Buzzer making weird screeching sound in Node.js

最近,我一直在摆弄 Node.js、破折号按钮和 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就是要发出蜂鸣声的次数)

出于某种原因,与 Python 脚本发出的均匀、类似蜂鸣器的声音相比,Node.js 脚本发出奇怪的尖叫声。非常感谢。感谢帮助。

Node 使用事件循环系统。当你告诉它睡觉时,你实际上是在说:"Be free! Do what ever else you need to do, and keep checking to see if I have any more work for you to do"。然后在你给定的时间之后,它会向队列中添加一个作业,树莓派会拾取它并执行它。

这样做的问题是,这样 pi 不能非常精确。您释放 CPU 并且只能在 CPU 返回给您时播放下一个滴答声。这可能每次都不同,可能会导致发出尖锐的声音。

我将尝试不同的方法并 post 返回我的发现,但我怀疑坚持 CPU 会产生更好的结果: - Node 有一个更精确的计时器,称为 process.hrtime,这将被证明是有用的。 - 我将开始一个无限循环并使用 hrtime 来控制何时打勾。 - 这可能会很糟糕并导致 pi 无法访问。

我会告诉你的。 ;)