Node.js:我如何延迟(不睡眠)从一条线到另一条线以循环脉冲步进电机
Node.js: how can I delay (not sleep) from one line to another to pulse stepper motor in a loop
我在 Raspberry Pi 3B+ 中控制带开关的步进电机,并希望在一个循环内延迟设置脉冲高电平和低电平之间的延迟。
for (i=0; i < steps; i++) {
pinPul.writeSync(1);
delay here 10 milliseconds
pinPul.writeSync(0);
delay another 10 milliseconds
}
我不想在延迟期间停止执行程序中正在进行的任何其他操作。
Node.js 使用事件循环。并且您想使用等待的同步功能。
js/node 中的默认方法是使用 setTimeout() but it relies on callbacks and cannot be used on a for loop. To fix this you need to use the modern async/await。
async function sleep(ms) {
return new Promise(resolve => {
setTimeout(resolve, ms);
});
}
async function ledLoop() {
for (i=0; i < steps; i++) {
pinPul.writeSync(1);
await sleep(10);
pinPul.writeSync(0);
await sleep(10);
}
}
ledLoop();
只是评论。 10ms 对于人眼来说太快了。更改为 1000ms 以便更好地测试。
我在 Raspberry Pi 3B+ 中控制带开关的步进电机,并希望在一个循环内延迟设置脉冲高电平和低电平之间的延迟。
for (i=0; i < steps; i++) {
pinPul.writeSync(1);
delay here 10 milliseconds
pinPul.writeSync(0);
delay another 10 milliseconds
}
我不想在延迟期间停止执行程序中正在进行的任何其他操作。
Node.js 使用事件循环。并且您想使用等待的同步功能。
js/node 中的默认方法是使用 setTimeout() but it relies on callbacks and cannot be used on a for loop. To fix this you need to use the modern async/await。
async function sleep(ms) {
return new Promise(resolve => {
setTimeout(resolve, ms);
});
}
async function ledLoop() {
for (i=0; i < steps; i++) {
pinPul.writeSync(1);
await sleep(10);
pinPul.writeSync(0);
await sleep(10);
}
}
ledLoop();
只是评论。 10ms 对于人眼来说太快了。更改为 1000ms 以便更好地测试。