javascript - 为什么blinkLED说它正在超时
问题描述
我很难多次调用以下函数。当我这样做时,我相信我遇到了计时错误,我似乎无法找到另一种方法来编写此代码以在给定命令时执行 Raspberry Pi 的 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 包取消导出它们。所以没有 LED.unexport(); 该程序每次都能完美运行。
推荐阅读
- mysql - 我试图将我的 SpringBoot 应用程序与本地主机中的 MySQL 数据库连接起来。但它显示了这个错误。(我的 MySQL 版本是 5.0)
- java - 在将 Maven 多模块项目从 git 克隆到 intellij 时,不会自动设置源、测试源和资源根
- mysql - Mysql SUM 和 GROUP BY 来自 3 个表
- docker - 了解 docker 端口分流
- sql - LIKE 运算符作为 RegEx 的替代品
- java - 当我在 Struts 1.3 应用程序中重定向到登录页面时如何显示“:无效的用户名和密码”
- javascript - 使用使用效果 React Native 设置过期日期,但屏幕无法正确重新渲染
- javascript - 使用浏览器中的 create-react-app 读取和写入文本文件
- ios - 如何在for循环中按顺序运行函数
- python - 在函数中导入模块会产生问题吗?