mardi 6 mai 2014

Nouvelle version

La commande se fait maintenant avec les touches du clavier. On ajoute un événement gérant l'appuie sur une touche et dans la fonction, on émet un socket en fonction de la touche appuyée que l'on détecte par son code présent dans keyCode :
touche    code
haut        38
bas         40
gauche   37
droite     39
espace    32
z             90
s             83

Ce qui donne l'instruction suivante:

document.addEventListener('keydown', function(e) {
              if(e.keyCode==38) socket.emit('avance','Avancer');
              if(e.keyCode==40) socket.emit('recule','Reculer');
              if(e.keyCode==37) socket.emit('gauche','A gauche');
              if(e.keyCode==39) socket.emit('droite','A droite');
              if(e.keyCode==32) socket.emit('arrete','Arreter');
              if(e.keyCode==90) socket.emit('haut','En haut');
              if(e.keyCode==83) socket.emit('bas', 'En bas');
             }, false);

Dans le fichier app.js peu de changements sauf que l'on gère maintenant le placement de la caméra vers le haut ou le bas, l'angle fourni au servomoteur numéro 2 est dans la variable cam qui est incrémentée ou décrémentée de 10.
Ce qui donne les deux fonctions suivantes appelées suite à l'appuie sur les touches z ou s:

socket.on('haut', function (message) {
    console.log('En haut');
    cam-=10;
    pwm.setPWM(2, 0, cam);
  });
  socket.on('bas', function (message) {
    console.log('En bas');
    cam+=10;
    pwm.setPWM(2, 0, cam);
  });   

Les programmes complets:
App.js:
var http = require('http');
var fs = require('fs');
var PwmDriver = require('adafruit-i2c-pwm-driver');

var pwm = new PwmDriver(0x40);
var servoMin = 150;
var servoMax = 600;
var cam=400;

var setServoPulse = function(channel, pulse) {
  var pulseLength;
  pulseLength = 1000000;
  pulseLength /= 60;
  print("%d us per period" % pulseLength);
  pulseLength /= 4096;
  print("%d us per bit" % pulseLength);
  pulse *= 1000;
  pulse /= pulseLength;
  return pwm.setPWM(channel, 0, pulse);
};

pwm.setPWMFreq(60);

var server = http.createServer(function(req, res) {
  fs.readFile('./index.html', 'utf-8', function(error, content) {
    res.writeHead(200, {"Content-Type": "text/html"});
    res.end(content);
  });
});

var io = require('socket.io').listen(server, { log: false});

io.sockets.on('connection', function (socket) {
  socket.emit('message', 'Vous êtes bien connecté !');
  socket.on('avance', function (message) {
    console.log('Avance');
    pwm.setPWM(0, 0, servoMin);
    pwm.setPWM(1, 0, servoMax);
  });
  socket.on('arrete', function (message) {
    console.log('Arrete');
    pwm.setPWM(0, 0, 410);
    pwm.setPWM(1, 0, 410);
  });
  socket.on('recule', function (message) {
    console.log('Recule');
    pwm.setPWM(0, 0, servoMax);
    pwm.setPWM(1, 0, servoMin);
  });
  socket.on('gauche', function (message) {
    console.log('A gauche');
    pwm.setPWM(0, 0, servoMax);
    pwm.setPWM(1, 0, servoMax);
  });
  socket.on('droite', function (message) {
    console.log('A droite');
    pwm.setPWM(0, 0, servoMin);
    pwm.setPWM(1, 0, servoMin);
  });

  socket.on('haut', function (message) {
    console.log('En haut');
    cam-=10;
    pwm.setPWM(2, 0, cam);
  });
  socket.on('bas', function (message) {
    console.log('En bas');
    cam+=10;
    pwm.setPWM(2, 0, cam);
  });   

});
server.listen(8080);

Index.html:
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>CamBot</title>
    </head>

    <body>
        <h1>Commande du robot</h1>

        <script src="/socket.io/socket.io.js"></script>
        <script>
            var socket = io.connect('http://192.168.1.10:8080');
            socket.on('message', function(message) {
              alert('Le serveur a un message pour vous: ' + message);
            })
            
            document.addEventListener('keydown', function(e) {
              if(e.keyCode==38) socket.emit('avance','Avancer');
              if(e.keyCode==40) socket.emit('recule','Reculer');
              if(e.keyCode==37) socket.emit('gauche','A gauche');
              if(e.keyCode==39) socket.emit('droite','A droite');
              if(e.keyCode==32) socket.emit('arrete','Arreter');
              if(e.keyCode==90) socket.emit('haut','En haut');
              if(e.keyCode==83) socket.emit('bas', 'En bas');
             }, false);

        </script>
    </body>
</html>