Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 尝试读取输入时gpio.read null false_Node.js_Callback_Null_Raspberry Pi_Gpio - Fatal编程技术网

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的情况下,一旦从电路板读取,它将返回一个值,因此您不需要将其封装在承诺中