2017-09-14 37 views
0

ラズベリーpi gpioモジュールがインストールされたノードサーバーを実行しています。 ESCを0.5秒間起動してから実行していますが、0.5秒間停止してからループを再開する必要があります。しかし、私はここで Javascript、0.5秒間機能を実行してから停止(ループ)

が私のコードで完全に停止して、1000年(モーター停止)にサーボパルス幅を設定するループを必要= 0(ボタンをオフ)「スタート」、それはちょっと動作します。しかし

var start = new blynk.VirtualPin(4); 
start.on('write', function t(start) { 
    if (start == 1) { 
    setInterval(function() { 
     setInterval(function() { 
     motor.servoWrite(1920); 
     }, 500); 
     setInterval(function() { 
     motor.servoWrite(1000); 
     }, 1000); 
    }, 500); 
    } else { 
    motor.servoWrite(1000); 
    } 
    motor.servoWrite(1000); 
}); 

は、誰かが私が間違って行ってきた私を示してもらえ停止しませんか?その後、変数

var myInterval = setInterval(function() { [... your code code] },delay); 

答えて

0
var start = new blynk.VirtualPin(4); 
motor.servoWrite(1000); 
var interval, timeout; 
start.on('write', function t(start) { 
    if (start == 1) { 
    clearInterval(interval); 
    clearTimeout(timeout); 
    interval = setInterval(function() { 
     motor.servoWrite(1920); 
     timeout = setTimeout(function() { 
     motor.servoWrite(1000); 
     }, 500); 
    }, 1000); 
    } else { 
    clearInterval(interval); 
    clearTimeout(timeout); 
    motor.servoWrite(1000); 
    } 
}); 
+0

完全に動作します、ありがとう:) – SARUAV

1

ストアあなたの間隔私はsetIntervalを使用するために間違ったことかもしれないと思う

clearInterval(myInterval); 
+0

もちろん、ミリ秒単位の時間と関数の第2引数 'setInterval'もあります。 –

+0

はい、もちろんです。私の悪い:) Thanks Catalin。 – entiendoNull

0

ことによってそれを停止します。 setIntervalが再発しています。あなたが本当にただ一度何かを実行したい場合は、待ってから別のものを実行してください。 setTimeoutでそれをやろうとすると、x ms待ってから何かを実行します。

var id = null; 
start.on('write', function t(start) { 
    if(start == 1){ 
     pulse(); 
    } 
    else { 
     clearTimeout(id); 
     motor.servoWrite(1000); 
    } 
}); 

function pulse() { 
    servoOn(); 
    id = setTimeout(function(){ 
     servoOff(); 
     id = setTimeout(function(){ 
      pulse(); 
     }, 1000); 
    }, 500); 
} 

function servoOn(){ 
    motor.servoWrite(1920); 
} 

function servoOff(){ 
    motor.servoWrite(1000); 
} 
関連する問題