2016-07-10 19 views
0

Ich brauche deine Hilfe mit meinem Webserver gesteuerten Roboterprojekt. Ich versuche, zwei Motoren über die Website zu steuern.Fehlender Fehlerhandler auf `socket` TypeError: Task ist keine Funktion - node.js async.js

Viele Sachen funktionieren bereits, also kann ich eine Website öffnen und die "w" -Taste drücken und beide Motoren beginnen vorwärts zu laufen. (MyControlls: w = Vorwärts, s = rückwärts, a = links, d = rechts)

Aber ein anderer Befehl wird nicht mehr verarbeitet.

auf der Kommandozeile kann ich diese Fehlermeldung:

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) 

Es scheint, dass das Problem um die moveForward ist: function() und async.parallel (Die anderen Move-Funktionen haben die gleiche Ausgabe.)

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) 
    ]); 
} 
}; 

Bitte helfen!

Antwort

1

Sie verwenden async.parallel() nicht korrekt. Es benötigt eine Reihe von Funktionen und gpio.write() gibt keine Funktion zurück.

Sie brauchen so etwas wie dies zu tun:

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

Um den zusätzlichen Textvorschlag zu vermeiden, können Sie auch eine Funktion ausklammern, die die notwendigen Funktionen je nach Bedarf erstellt:

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

DANKE ! Es funktioniert - ich fahre durch meinen Garten! ;-) – ClCl