gpio.read null false при попытке прочитать ввод - PullRequest
0 голосов
/ 02 мая 2019

Я пытался прочитать значения с ультразвукового датчика.код, который я использую

    //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

Не знаю почему?Я, хотя это было из-за занятых контактов, поэтому я попытался сбросить их перед использованием и все.Есть идеи?

1 Ответ

0 голосов
/ 02 мая 2019

Вам не нужно оборачивать gpio.read в Обещание.

   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 он уже вернет значение, как только оно будет прочитано с доски, поэтому вам не нужно заключать его в обещание.

...