我一直在尝试从超声波传感器读取值。 我正在使用的代码
foreach (var number in TestList)
{
if(!actionBlock.Post(number))
actionBlock.Complete();
try
{
await actionBlock.Completion;
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
//actionBlock is now dead
break;
}
}
我写了类似的python代码,我得到了值,但在这里我得到了
//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)
]);
};
我不知道为什么? 我虽然是由于繁忙的引脚,所以我在使用之前尝试重置它们。有什么想法吗?
答案 0 :(得分:0)
您无需将gpio.read包装在Promise中。
var gpio_read = function (channel) {
gpio.read(channel, function (error, result) {
console.log('gpio.read', error, result);
return result;
});
}
您编写(new Promise(...)
)的方式只会创建一个Promise,但实际上不会将其返回给调用函数。为此,您将需要return new Promise(...)
并更改调用代码以等待承诺(例如gpio_read.then(fn)
)。
对于gpio.read,一旦从板上读取它就已经返回了一个值,因此您无需将其包装在promise中。