Guest User

Untitled

a guest
Jun 19th, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <meta charset="utf-8">
  5.     <title>NetbookBot Remote</title>
  6.     <style>
  7.     #remotetable {
  8.         border-spacing: 0px;
  9.     }
  10.     #remotetable button {
  11.         width: 100px;
  12.         height: 100px;
  13.         margin: 0px;
  14.         padding: 0px;
  15.        
  16.     }
  17.     #remotetable button.holding {
  18.         outline: 2px solid orange;
  19.     }
  20.     #remotetable canvas {
  21.         display: block;
  22.         margin-left: 10px;
  23.     }
  24.     </style>
  25. </head>
  26. <body>
  27.  
  28. <h1>NetbookBot Remote</h1>
  29. <table id="remotetable" cellspaning=0 cellpadding=0>
  30.     <tr>
  31.         <td rowspan=3 width=120>Camera:<br><button id="btn_TiltUp">Tilt up</button><br><button id="btn_TiltDown">Tilt down</button></td>
  32.         <td></td>
  33.         <td><button id="btn_Forward">Forward</button></td>
  34.         <td></td>
  35.         <td rowspan=3><canvas width=400 height=300 id="sensoroutput"></canvas></td>
  36.     </tr>
  37.     <tr>
  38.         <td><button id="btn_TurnLeft">Turn Left</button></td>
  39.         <td><!--<button id="btn_Stop">Stop</button>--></td>
  40.         <td><button id="btn_TurnRight">Turn Right</button></td>
  41.     </tr>
  42.     <tr>
  43.         <td></td>
  44.         <td><button id="btn_Backward">Backward</button></td>
  45.         <td></td>
  46.     </tr>
  47. </table>
  48. <p>You can also use the arrow keys and Page Up/Down keys<br>
  49. <a href="skype:netbook.bot?call">Call the robot</a> (Skype)</p>
  50.  
  51. <script>
  52.  
  53. (function (global) {
  54.     'use strict';
  55.    
  56.     var socanvas = global.document.getElementById('sensoroutput');
  57.     var soc = socanvas.getContext('2d');
  58.    
  59.     var sensorvalues = {
  60.         'leftDistance': 0,
  61.         'rightDistance': 0,
  62.         'ambientLight': 0,
  63.         'batteryLevel': 0
  64.     };
  65.    
  66.     var updateSensorValues = function () {
  67.         soc.clearRect(0, 0, socanvas.width, socanvas.height);
  68.         soc.save();
  69.             soc.fillStyle = 'black';
  70.             soc.font = "13px sans-serif";
  71.             soc.fillText("Ambient light level:", 0, 11);
  72.            
  73.             soc.fillText("Battery level:", 205, 11);
  74.             soc.font = "bold 16px sans-serif";
  75.             soc.fillText(sensorvalues.batteryLevel+" V", 285 , 13);
  76.            
  77.             soc.textAlign = "center";
  78.             soc.fillText("Distance", 100, 80);
  79.             soc.font = "bold 16px sans-serif";
  80.             soc.fillText(sensorvalues.leftDistance+" cm", 50, 100);
  81.             soc.fillText(sensorvalues.rightDistance+" cm", 150, 100);
  82.            
  83.             soc.globalAlpha = sensorvalues.ambientLight/1023;
  84.             soc.fillRect(1, 16, 199, 49);
  85.             soc.globalAlpha = 1.0;
  86.             soc.strokeRect(0.5, 15.5, 200, 50);
  87.            
  88.             soc.strokeStyle = "#999";
  89.             soc.beginPath();
  90.             soc.moveTo(100.5, 85);
  91.             soc.lineTo(100.5, 300);
  92.             soc.stroke();
  93.            
  94.             soc.fillStyle = "#CCC";
  95.             soc.fillRect(205, 16, 9*15+4, 29);
  96.             soc.fillStyle = "#3F3";
  97.             soc.fillRect(207, 18, Math.min(sensorvalues.batteryLevel, 9)*15, 25);
  98.            
  99.             var leftBar = Math.min(Math.round(sensorvalues.leftDistance*1.5), 190);
  100.             var rightBar = Math.min(Math.round(sensorvalues.rightDistance*1.5), 190);
  101.            
  102.             soc.lineWidth = 2;
  103.            
  104.             soc.fillStyle = "#F00";
  105.             soc.strokeStyle = "#C00";
  106.             soc.fillRect(10, 110+189-leftBar, 80, leftBar);
  107.             soc.strokeRect(10, 110+189-leftBar, 80, leftBar);
  108.             soc.fillStyle = "#0F0";
  109.             soc.strokeStyle = "#0C0";
  110.             soc.fillRect(110, 110+189-rightBar, 80, rightBar);
  111.             soc.strokeRect(110, 110+189-rightBar, 80, rightBar);
  112.            
  113.         soc.restore();
  114.     };
  115.     updateSensorValues();
  116.    
  117.     var actions = [
  118.         ['Forward', 38],
  119.         ['Backward', 40],
  120.         ['TurnLeft', 37],
  121.         ['TurnRight', 39],
  122.         ['TiltUp', 33],
  123.         ['TiltDown', 34]
  124.     ];
  125.    
  126.     var buttons = [];
  127.    
  128.     var lastSent = -1;
  129.    
  130.     var downListener = function (i) {
  131.         return function (e) {
  132.             actions[i].isHolding = true;
  133.             if(lastSent !== i && ws && ws.readyState === 1) {
  134.                 ws.send(actions[i][0]);
  135.                 lastSent = i;
  136.             }
  137.             e.preventDefault();
  138.         };
  139.     };
  140.     var upListener = function (i) {
  141.         return function () {
  142.             if(actions[i].isHolding) {
  143.                 actions[i].isHolding = false;
  144.                 if(lastSent !== -1 && ws && ws.readyState === 1) {
  145.                     ws.send("Stop");
  146.                     lastSent = -1;
  147.                 }
  148.             }
  149.         };
  150.     };
  151.    
  152.     var keyCodes = [];
  153.    
  154.     for(var i=0; i < actions.length; i+=1) {
  155.         buttons[i] = global.document.getElementById('btn_'+actions[i][0]);
  156.         buttons[i].addEventListener('mousedown', downListener(i), false);
  157.         buttons[i].addEventListener('mouseup', upListener(i), false);
  158.         keyCodes[i] = actions[i][1];
  159.         actions[i].isHolding = false;
  160.     }
  161.    
  162.     global.addEventListener('keydown', function (e) {
  163.         var kc = e.keyCode;
  164.         var i = keyCodes.indexOf(kc);
  165.         if(i > -1) {
  166.             actions[i].isHolding = true;
  167.             buttons[i].classList.add("holding");
  168.             if(lastSent !== i && ws && ws.readyState === 1) {
  169.                 ws.send(actions[i][0]);
  170.                 lastSent = i;
  171.             }
  172.             e.preventDefault();
  173.         }
  174.     }, false);
  175.     global.addEventListener('keyup', function (e) {
  176.         var kc = e.keyCode;
  177.         var i = keyCodes.indexOf(kc);
  178.         if(i > -1) {
  179.             if(actions[i].isHolding) {
  180.                 actions[i].isHolding = false;
  181.                 buttons[i].classList.remove("holding");
  182.                 if(lastSent !== -1 && ws && ws.readyState === 1) {
  183.                     ws.send("Stop");
  184.                     lastSent = -1;
  185.                 }
  186.             }
  187.         }
  188.     }, false);
  189.    
  190.     if(!window.WebSocket) window.WebSocket = window.MozWebSocket;
  191.    
  192.     var ws = new WebSocket("ws://"+global.document.location.hostname+":8022");
  193.    
  194.     ws.onopen = function () {
  195.         console.log("Connected");
  196.     };
  197.     ws.onmessage = function (e) {
  198.         var data = JSON.parse(e.data);
  199.         if(data.sensorvalues !== undefined) {
  200.             //if(data.sensorvalues[0] != "255")
  201.                 sensorvalues.leftDistance = +data.sensorvalues[1];
  202.             //if(data.sensorvalues[1] != "255")
  203.                 sensorvalues.rightDistance = +data.sensorvalues[0];
  204.             sensorvalues.ambientLight = parseInt(data.sensorvalues[2], 10);
  205.             updateSensorValues();
  206.         }
  207.         if(data.batterylevel !== undefined) {
  208.             sensorvalues.batteryLevel = data.batterylevel;
  209.             updateSensorValues();
  210.         }
  211.        
  212.     };
  213.     ws.onclose = function () {
  214.         console.log("Disconnected");
  215.     };
  216.     ws.onerror = function (e) {
  217.         console.log("Socket error");
  218.     };
  219.    
  220. }(self));
  221.  
  222. </script>
  223. </body>
  224. </html>
Add Comment
Please, Sign In to add comment