我一直在尝试从超声传感器读取值。我正在使用的代码
//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.读取诺言。
var gpio_read = function (channel) {
gpio.read(channel, function (error, result) {
console.log('gpio.read', error, result);
return result;
});
}
您编写的方式(new Promise(...)
(只会创建一个诺言,但实际上从未将其返回到呼叫功能。为此,您需要return new Promise(...)
并更改呼叫代码等待承诺(例如gpio_read.then(fn)
(。
在GPIO的情况下。阅读一旦从木板读取值后,它将已经返回一个值,因此您无需将其包裹在承诺中。