gpio.在尝试读取输入时阅读null false



我一直在尝试从超声传感器读取值。我正在使用的代码

    //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的情况下。阅读一旦从木板读取值后,它将已经返回一个值,因此您无需将其包裹在承诺中。

相关内容

  • 没有找到相关文章

最新更新