2016-10-12 7 views
1

最近、Node.js、ダッシュボタン、およびRaspberry Pi GPIOを使いこなしています。私はGPIOのシーン全体の一種のノブなので、私はそれを使いこなしました。ブザーをブレッドボードに接続し、Pythonを使ってトリガしました。次のようにします。Node.jsで奇妙な音を立てるブザー音

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スクリプトが作る、一様で、ブザーのようなサウンドです。事前にありがとうございます。ヘルプは高く評価されます。

+0

800から80または8に変更するとどうなりますか?いくつかのフィードバック効果が起こるかもしれません。 – ShpielMeister

答えて

0

ノードはイベントループシステムを使用します。あなたがそれを眠るように言うと、あなたは実際に言っています:「自由になりなさい、あなたがする必要があることを何でもして、あなたがやるべきことが何かあるかどうかを確認し続ける」。その後、あなたの与えられた時間の後、それはキューにジョブを追加し、ラズベリーはそれを持ち上げて実行します。

この問題は、piがこのように非常に正確であることができないということです。あなたはCPUを解放し、CPUがあなたに戻ったときにのみ次のティックをプレイすることができます。これは毎回変わる可能性があり、おそらくスクリーチ音につながっているでしょう。

私は別の方法を試してみて、私の所見と一緒にポストバックしますが、CPUを持っていくと良い結果が得られるはずです。 - ノードにはより正確なprocess.hrtimeというタイマーがあります。 - 無限ループを開始し、hrtimeを使用してチェックするタイミングを制御します。 - これは悪くなり、piが到達不能になる可能性があります。

お知らせします。 ;)

関連する問題