所以我的用例是我想通过Raspberry Pi控制步进电机。该控件应该可以通过Socket.io在Web套接字上工作,并且到目前为止效果还不错。
现在,我想通过一个Web套接字调用开始转动我的电动机,并通过一个电话就停止电动机。
到目前为止,我的代码是:
var looping;
socket.on('start looping', function() {
console.log("Start looping");
var pin = 40;
rpio.open(pin, rpio.OUTPUT, rpio.LOW);
looping = setInterval(function(){
for(var i = 1; i < 100; i++){
rpio.write(pin, rpio.HIGH);
rpio.sleep(0.001);
rpio.write(pin, rpio.LOW);
}
},1);
});
socket.on('stop looping', function() {
console.log("Stop looping");
clearInterval(looping);
});
如您所见,我使用间隔为1毫秒的setInterval
,并且在循环内以0.001秒的间隔打开和关闭引脚。
这两个间隔确实困扰着我,我想使用一个间隔,以便能够更精确地控制电机。
也许我这样做做错了。您能给我一些帮助或建议吗,我该如何解决这个问题呢?
谢谢!
编辑:好的...我将重新格式化我的问题: 在我尝试开始和停止之前,像这样:
var running = true
socket.on('start looping', function() {
console.log("Start looping");
var pin = 40;
rpio.open(pin, rpio.OUTPUT, rpio.LOW);
while(running){
rpio.write(pin, rpio.HIGH);
rpio.sleep(0.001);
rpio.write(pin, rpio.LOW);
}
socket.on('stop looping', function() {
console.log("Stop looping");
running = false
});
但是由于while
循环阻止处理另一个套接字调用,我不得不使用setInterval
。也许这有助于更好地理解我的用例和问题。