Node.js 尝试读取输入时gpio.read null false
我一直在尝试从超声波传感器读取数值。 我正在使用的代码Node.js 尝试读取输入时gpio.read null false,node.js,callback,null,raspberry-pi,gpio,Node.js,Callback,Null,Raspberry Pi,Gpio,我一直在尝试从超声波传感器读取数值。 我正在使用的代码 //callbacks; got from a previous post var gpio_read = function (channel) { new Promise(resolve => { gpio.read(channel, function (error, result) { console.log('gpio.read', error, result); resolve(re
//callbacks; got from a previous post
var gpio_read = function (channel) {
new Promise(resolve => {
gpio.read(channel, function (error, result) {
console.log('gpio.read', error, result);
resolve(result);
});
});
}
//
var off = function () {
gpio.write(trig, 0);
}
tank.getDistance = function () {
var start, stop;
gpio.write(trig, 0);
gpio.write(trig, 1);
setTimeout(off, 10);
while (gpio_read(echo) === 0) {
start = Date.now();
console.log("nosig");
}
while (gpio_read(echo) === 1) {
stop = Date.now();
console.log("sig");
}
console.log(stop - start);
};
// pin setup
tank.initPins = function () {
async.parallel([
gpio.setup(p7, gpio.DIR_OUT),
gpio.setup(p11, gpio.DIR_OUT),
gpio.setup(p13, gpio.DIR_OUT),
gpio.setup(p15, gpio.DIR_OUT),
gpio.setup(echo, gpio.DIR_IN),
gpio.setup(trig, gpio.DIR_OUT)
]);
};
我编写了类似的python代码,我得到了值,但在这里我得到了
gpio.read null false
gpio.read null true
我不知道为什么?
我想这是因为忙引脚,所以我尝试在使用前重置它们。有什么想法吗?您不需要将gpio.read包装在承诺中
var gpio_read = function (channel) {
gpio.read(channel, function (error, result) {
console.log('gpio.read', error, result);
return result;
});
}
您编写它的方式(newpromise(…)
)只会创建一个Promise,而不会实际将其返回给调用函数。为此,您需要返回新的承诺(…)
,并更改调用代码以等待承诺(例如gpio\u read.then(fn)
)
在gpio.read的情况下,一旦从电路板读取,它将返回一个值,因此您不需要将其封装在承诺中