蜂鸣器在 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 无法访问。
我会告诉你的。 ;)
最近,我一直在摆弄 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 无法访问。
我会告诉你的。 ;)