如何为有间隔的任务使用循环?

时间:2019-04-05 15:58:47

标签: javascript loops websocket raspberry-pi

所以我的用例是我想通过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。也许这有助于更好地理解我的用例和问题。

0 个答案:

没有答案