2016-07-10 12 views
0

私のウェブサーバ制御のロボットプロジェクトであなたの助けが必要です。 私は2つのモーターをウェブサイトで制御しようとしています。`socket`のエラーハンドラが見つかりませんTypeError:タスクは関数ではありません - node.js async.js

私はウェブサイトを開いて「w」キーを押して、両方のモーターが前進することができるように、すでに多くのものが働いています。 (MyControlls:w =前方、s =後方、a =左、d =右)

しかし、別のコマンドはもう処理されません。コマンドラインで

私は、このエラーメッセージが表示することができます:問題がmoveForwardの周りにあるように見える

Missing error handler on `socket`. 
TypeError: task is not a function 
at /home/pi/tank/node_modules/async/dist/async.js:5285:13 
at replenish (/home/pi/tank/node_modules/async/dist/async.js:871:21) 
at /home/pi/tank/node_modules/async/dist/async.js:881:15 
at _parallel (/home/pi/tank/node_modules/async/dist/async.js:5284:9) 
at parallelLimit (/home/pi/tank/node_modules/async/dist/async.js:5317:14) 
at Object.parallel (/home/pi/tank/node_modules/async/dist/async.js:930:20) 
at Object.tank.moveForward (/home/pi/tank/app.js:46:9) 
at Socket.<anonymous> (/home/pi/tank/app.js:87:9) 
at emitOne (events.js:96:13) 
at Socket.emit (events.js:188:7) 

を:機能()とasync.parallel (他の入居の機能は同じを持っています)

var tank = { 

//we create an object with the used pins 
motors : { 
    leftFront: 11, 
    leftBack: 12, 
    rightFront: 15, 
    rightBack: 16 
}, 

//we open the gpio pins and set the as outputs 
init : function(){ 
    gpio.open(this.motors.leftFront, "output"); 
    gpio.open(this.motors.leftBack, "output"); 
    gpio.open(this.motors.rightFront, "output"); 
    gpio.open(this.motors.rightBack, "output"); 
}, 

//in order to move the tank forward, we supply both motors 
moveForward : function(){ 
    async.parallel([ 
    gpio.write(this.motors.leftFront, 1), 
    gpio.write(this.motors.rightFront, 1) 
    ]) 
}, 

//in order to move the tank backwards, we supply both motors, but with inverse polarity 
moveBackward : function(){ 
    async.parallel([ 
    gpio.write(this.motors.leftBack, 1), 
    gpio.write(this.motors.rightBack, 1) 
    ]); 
}, 

//in order to turn right, we supply on the left 
moveLeft : function(){ 
    gpio.write(this.motors.leftFront, 1); 
}, 

//in order to turn left, we supply on the right 
moveRight : function(){ 
    gpio.write(this.motors.rightFront, 1); 
}, 

//in order to stop both motors, we set all pins to 0 value 
stop : function(){ 
    async.parallel([ 
    gpio.write(this.motors.leftFront, 0), 
    gpio.write(this.motors.leftBack, 0), 
    gpio.write(this.motors.rightFront, 0), 
    gpio.write(this.motors.rightBack, 0) 
    ]); 
} 
}; 

助けてください!

答えて

1

あなたはasync.parallel()を正しく使用していません。それは関数の配列をとり、gpio.write()は関数を返しません。

あなたはこのような何かをする必要があります。

write: function (motor, value) { 
    return function (callback) { 
     gpio.write(motor, value, callback); 
    }; 
}, 

moveForward : function(){ 
    async.parallel([ 
     this.write(this.motors.leftFront, 1), 
     this.write(this.motors.rightFront, 1) 
    ]); 
}, 
+0

ありがとう:

var self = this; async.parallel([ function (callback) { gpio.write(self.motors.leftBack, 1, callback); }, function (callback) { gpio.write(self.motors.rightBack, 1, callback); } ]); 

を余分に定型を避けるために、あなたはまた、必要に応じて必要な機能を作成する機能をくくり出すことができ!それは動作します - 私は私の庭を通って乗っています! ;-) – ClCl

関連する問題