为什么blinkLED显示超时



我很难多次调用下面的函数。当我这样做时,我相信我得到了一个定时错误,我似乎无法找到另一种方法来编写这段代码,以使树莓派的GPIO引脚在给定命令时执行。它大部分是从例子中剥离出来的,我对它进行了包装。任何帮助都是感激的。函数在另一个文件中调用。

代码:

const GPIO = require('onoff').Gpio
const LED = new GPIO(9, 'out')

function call(){
const blinkInterval = setInterval(blinkLED, 2500);
function blinkLED() { //function to start blinking
  if (LED.readSync() === 0) { //check the pin state, if the state is 0 (or off)
    LED.writeSync(1); //set pin state to 1 (turn LED on)
  } else {
    LED.writeSync(0); //set pin state to 0 (turn LED off)
  }
}
function endBlink() { //function to stop blinking
  clearInterval(blinkInterval); // Stop blink intervals
  LED.writeSync(0); // Turn LED off
  LED.unexport(); // Unexport GPIO to free resources
}
setTimeout(endBlink, 5000);

错误:

internal/fs/utils.js:298
    throw err;
    ^
Error: EBADF: bad file descriptor, read
    at Object.readSync (fs.js:581:3)
    at Gpio.readSync (/home/pi/Documents/project/node_modules/onoff/onoff.js:214:8)
    at Timeout.blinkLED [as _onTimeout] (/home/pi/Documents/project/shot.js:10:11)
    at listOnTimeout (internal/timers.js:551:17)
    at processTimers (internal/timers.js:494:7) {
  errno: -9,
  syscall: 'read',
  code: 'EBADF'
}

既然没有人回答,我想我已经为偶然发现这个的人弄明白了。

为了多次重复使用相同的引脚,你不需要根据NPM的on-off包取消导出它们。如果没有LED.unexport();程序每次都运行得很好。

最新更新