最近,我一直在搞乱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脚本产生了一种奇怪的尖锐声音。非常感谢提前。感谢帮助。
答案 0 :(得分:0)
Node使用事件循环系统。当你告诉它睡觉时,你实际上在说:“自由!做你需要做的其他事情,并继续检查,看看我是否还有更多工作要做”。然后在你给定的时间之后,它会在队列中添加一个作业,树莓会把它拿起并执行它。
问题在于,这种方式pi不能非常精确。您释放CPU并且只能在CPU返回给您时播放下一个滴答。这可能每次都有所不同,可能会导致发出声音。
我将尝试一种不同的方法并回复我的发现,但我怀疑保持CPU会产生更好的结果:
- 节点有一个更精确的定时器叫process.hrtime
,这将证明是有用的。
- 我将开始一个无限循环并使用hrtime来控制何时打勾。
- 这可能会很糟糕,导致pi无法访问。
我会告诉你的。 ;)