尝试在NodeJs中调用函数时发生回调错误

时间:2019-05-01 10:45:37

标签: node.js websocket raspberry-pi distance arduino-ultra-sonic

我正在尝试通过websockets控制树莓派。我找到了一个类似的项目,并一直在围绕着这个项目进行建设。我已经设法使除了距离传感器以外的所有东西都能正常工作。

    tank.getDistance = function () {
   async.parallel([
    gpio.write(trig,0),
    gpio.write(trig,1),
    gpio.write(trig,0),
  ]);
  var start,stop;
  while(gpio.read(echo) == 0){start = Date.now();}
  while(gpio.read(echo) == 1){stop = Date.now();}
  var distance = ((stop-start)/1000.0)*17000
  console.log("distance: "+ distance);
};

这就是我试图从超声波传感器读取的方式。我已经在python中测试了此逻辑,并且该逻辑在那里工作。

  socket.on('keydown', function (dir) {
    switch (dir) {
      case 'up':
        tank.moveForward();
        console.log("forward");
        tank.getDistance();
        break;

这是我调用函数的地方。但是每次调用此函数时,都会得到一个

/home/pi/marinaBot/marinaBot/node_modules/rpi-gpio/rpi-gpio.js:286
            throw new Error('A callback must be provided')
            ^
Error: A callback must be provided
    at Gpio.read.input (/home/pi/marinaBot/marinaBot/node_modules/rpi-gpio/rpi-gpio.js:286:19)
    at Object.tank.getDistance (/home/pi/marinaBot/marinaBot/app.js:78:14)

不知道为什么会这样,因为我什么也没退。我曾尝试使用其他超声波库,例如“ r-pi-usonic”,但我不了解它的设置。 有任何想法吗? 刚刚开始学习NodeJS。这可能真的很简单。

1 个答案:

答案 0 :(得分:0)

gpio.read(echo, callbackfunction(error, data){})

请检查此文档

https://github.com/JamesBarwell/rpi-gpio.js#readchannel-callback


您需要async/await的{​​{1}}函数

while

更新的内容:
1.使用var gpio = require('rpi-gpio') var gpio_read = function (channel) { return new Promise(resolve => { gpio.read(channel, function (error, result) { console.log('gpio.read', error, result); resolve(result); }); }); } var echo = 16; var calculateDistance = async function () { var start, stop; while (await gpio_read(echo) == false) { start = Date.now(); } while (await gpio_read(echo) == true) { stop = Date.now(); } var distance = ((stop - start) / 1000.0) * 17000 console.log("distance: " + distance); } gpiop.setup(echo, gpio.DIR_IN) .then(function () { calculateDistance(); }) .catch((err) => { console.log('Error: ', err.toString()) }) 作为

创建了calculateDistance函数
async
  1. var calculateDistance = async function () { ... }