2017-09-14 48 views
0

我正在運行一個安裝了rapberry pi gpio模塊的節點服務器。我試圖讓我的ESC啓動並運行0.5秒,然後我需要停止0.5秒,然後再次開始循環。然而,如果「開始」= 0(按鈕關閉)我需要循環完全停止,並將伺服脈衝寬度設置爲1000(電機停止)Javascript,運行功能0.5秒,然後停止(循環)

這是我的代碼,它有點作品。但不停止

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); 
}); 

有人能告訴我在哪裏我已經錯了嗎?

回答

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

Store中的一個變量

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

然後間隔由

clearInterval(myInterval); 
+0

並且以毫秒爲單位的時間和函數'setInterval'的第二個參數。 –

+0

當然可以。我的壞:)感謝Catalin。 – entiendoNull

0

阻止它,我認爲setInterval可能是使用了錯誤的事情。 setInterval正在重現。如果你真的只想運行一次,請等待,然後運行其他的東西。試着用setTimeout來做,它會等待xms,然後執行一些操作。

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); 
}