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

时间:2016-10-12 22:29:51

标签: python node.js raspberry-pi raspberry-pi3

最近,我一直在搞乱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脚本产生了一种奇怪的尖锐声音。非常感谢提前。感谢帮助。

1 个答案:

答案 0 :(得分:0)

Node使用事件循环系统。当你告诉它睡觉时,你实际上在说:“自由!做你需要做的其他事情,并继续检查,看看我是否还有更多工作要做”。然后在你给定的时间之后,它会在队列中添加一个作业,树莓会把它拿起并执行它。

问题在于,这种方式pi不能非常精确。您释放CPU并且只能在CPU返回给您时播放下一个滴答。这可能每次都有所不同,可能会导致发出声音。

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

我会告诉你的。 ;)