2017-09-14 97 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); 
}