2021-05-28 20:27:27 +00:00
|
|
|
<!DOCTYPE html>
|
|
|
|
<html lang='en'>
|
|
|
|
<head>
|
|
|
|
<title>Rover Command Center</title>
|
|
|
|
<meta charset="utf-8">
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
|
|
<style>
|
|
|
|
* {
|
|
|
|
box-sizing: border-box;
|
|
|
|
}
|
|
|
|
|
|
|
|
.section-container {
|
|
|
|
float: left;
|
|
|
|
width: 50%;
|
|
|
|
padding: 10px;
|
|
|
|
}
|
|
|
|
.flex-container {
|
|
|
|
display: flex;
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
}
|
|
|
|
ul {
|
|
|
|
list-style-type: none;
|
|
|
|
margin: 0;
|
|
|
|
padding: 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
li {
|
|
|
|
padding: 0px;
|
|
|
|
margin-bottom: 0px;
|
|
|
|
}
|
|
|
|
|
|
|
|
:is(h1, h2, h3, h4, h5, h6, label, strong, meter) {
|
|
|
|
font-family: Arial, Helvetica, sans-serif;
|
|
|
|
}
|
|
|
|
.movement-control {
|
|
|
|
text-align: center;
|
|
|
|
}
|
|
|
|
|
|
|
|
.sensor-data {
|
|
|
|
text-align: center;
|
|
|
|
}
|
|
|
|
|
|
|
|
meter{
|
|
|
|
width: 100%;
|
|
|
|
height: 40px;
|
|
|
|
transform: translateY(-8px);
|
|
|
|
}
|
|
|
|
|
|
|
|
meter::after {
|
|
|
|
content : attr(value) attr(title);
|
|
|
|
top:-28px;
|
|
|
|
left:0px;
|
|
|
|
position:relative;
|
|
|
|
}
|
|
|
|
|
|
|
|
.button {
|
|
|
|
display: inline-block;
|
|
|
|
padding: 15px 25px;
|
|
|
|
font-size: 24px;
|
|
|
|
cursor: pointer;
|
|
|
|
text-align: center;
|
|
|
|
text-decoration: none;
|
|
|
|
outline: none;
|
|
|
|
color: rgb(255, 255, 255);
|
|
|
|
background-color: #161616;
|
|
|
|
border: none;
|
|
|
|
border-radius: 15px;
|
|
|
|
box-shadow: 0 9px rgb(161, 161, 161);
|
|
|
|
}
|
|
|
|
|
|
|
|
.button:hover {background-color: #585858}
|
|
|
|
|
|
|
|
.button:active {
|
|
|
|
background-color: #107C10;
|
|
|
|
box-shadow: 0 5px rgb(161, 161, 161);
|
|
|
|
transform: translateY(4px);
|
|
|
|
}
|
|
|
|
|
|
|
|
.pressed {
|
|
|
|
background-color: #107C10;
|
|
|
|
box-shadow: 0 5px rgb(161, 161, 161);
|
|
|
|
transform: translateY(4px);
|
|
|
|
}
|
|
|
|
|
|
|
|
.clearfix::after {
|
|
|
|
content: "";
|
|
|
|
clear: both;
|
|
|
|
display: table;
|
|
|
|
}
|
|
|
|
|
|
|
|
</style>
|
|
|
|
<script>
|
2021-05-29 03:54:53 +00:00
|
|
|
|
|
|
|
var connection = new WebSocket('ws://'+location.hostname+':81/');
|
|
|
|
|
|
|
|
var MVM_F_status = 0;
|
|
|
|
var MVM_L_status = 0;
|
|
|
|
var MVM_R_status = 0;
|
|
|
|
var MVM_B_status = 0;
|
|
|
|
|
|
|
|
var BTRY_VOLT = 0;
|
|
|
|
var ODO_DIST = 0;
|
|
|
|
|
|
|
|
function round(value, precision) {
|
|
|
|
var multiplier = Math.pow(10, precision || 0);
|
|
|
|
return Math.round(value * multiplier) / multiplier;
|
|
|
|
}
|
|
|
|
|
|
|
|
connection.onmessage = function(event){
|
|
|
|
var raw_data = event.data;
|
|
|
|
console.log(raw_data);
|
|
|
|
var data = JSON.parse(raw_data);
|
|
|
|
digiBTRY_VOLT = data.BTRY_VOLT;
|
|
|
|
BTRY_VOLT = round((digiBTRY_VOLT*(4.8e-4)+4), 1)
|
|
|
|
ODO_DIST = data.ODO_DIST;
|
|
|
|
document.getElementById("btry_meter").value = BTRY_VOLT;
|
|
|
|
document.getElementById("Odometer").innerHTML = ODO_DIST;
|
|
|
|
}
|
|
|
|
|
|
|
|
function send_data()
|
|
|
|
{
|
|
|
|
var raw_data = '{"MVM_F":'+MVM_F_status+',"MVM_L":'+MVM_L_status+',"MVM_R":'+MVM_R_status+',"MVM_B":'+MVM_B_status+'}';
|
|
|
|
connection.send(raw_data);
|
|
|
|
console.log(raw_data);
|
|
|
|
}
|
|
|
|
|
|
|
|
function left_pressed(){
|
|
|
|
MVM_L_status = 1;
|
|
|
|
send_data();
|
|
|
|
}
|
|
|
|
function left_unpressed(){
|
|
|
|
MVM_L_status = 0;
|
|
|
|
send_data();
|
|
|
|
}
|
|
|
|
function up_pressed(){
|
|
|
|
MVM_F_status = 1;
|
|
|
|
send_data();
|
|
|
|
}
|
|
|
|
function up_unpressed(){
|
|
|
|
MVM_F_status = 0;
|
|
|
|
send_data();
|
|
|
|
}
|
|
|
|
function right_pressed(){
|
|
|
|
MVM_R_status = 1;
|
|
|
|
send_data();
|
|
|
|
}
|
|
|
|
function right_unpressed(){
|
|
|
|
MVM_R_status = 0;
|
|
|
|
send_data();
|
|
|
|
}
|
|
|
|
function down_pressed(){
|
|
|
|
MVM_B_status = 1;
|
|
|
|
send_data();
|
|
|
|
}
|
|
|
|
function down_unpressed(){
|
|
|
|
MVM_B_status = 0;
|
|
|
|
send_data();
|
|
|
|
}
|
|
|
|
|
2021-05-28 20:27:27 +00:00
|
|
|
document.onkeydown = function(e) {
|
|
|
|
switch (e.keyCode) {
|
|
|
|
case 37:
|
|
|
|
document.getElementById("left-arrow").className = "button pressed";
|
2021-05-29 03:54:53 +00:00
|
|
|
left_pressed();
|
2021-05-28 20:27:27 +00:00
|
|
|
break;
|
|
|
|
case 38:
|
|
|
|
document.getElementById("up-arrow").className = "button pressed";
|
2021-05-29 03:54:53 +00:00
|
|
|
up_pressed();
|
2021-05-28 20:27:27 +00:00
|
|
|
break;
|
|
|
|
case 39:
|
|
|
|
document.getElementById("right-arrow").className = "button pressed";
|
2021-05-29 03:54:53 +00:00
|
|
|
right_pressed();
|
2021-05-28 20:27:27 +00:00
|
|
|
break;
|
|
|
|
case 40:
|
|
|
|
document.getElementById("down-arrow").className = "button pressed";
|
2021-05-29 03:54:53 +00:00
|
|
|
down_pressed();
|
2021-05-28 20:27:27 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
document.onkeyup = function(e) {
|
|
|
|
switch (e.keyCode) {
|
|
|
|
case 37:
|
|
|
|
document.getElementById("left-arrow").className = "button";
|
2021-05-29 03:54:53 +00:00
|
|
|
left_unpressed();
|
2021-05-28 20:27:27 +00:00
|
|
|
break;
|
|
|
|
case 38:
|
|
|
|
document.getElementById("up-arrow").className = "button";
|
2021-05-29 03:54:53 +00:00
|
|
|
up_unpressed();
|
2021-05-28 20:27:27 +00:00
|
|
|
break;
|
|
|
|
case 39:
|
|
|
|
document.getElementById("right-arrow").className = "button";
|
2021-05-29 03:54:53 +00:00
|
|
|
right_unpressed();
|
2021-05-28 20:27:27 +00:00
|
|
|
break;
|
|
|
|
case 40:
|
|
|
|
document.getElementById("down-arrow").className = "button";
|
2021-05-29 03:54:53 +00:00
|
|
|
down_unpressed();
|
2021-05-28 20:27:27 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
</script>
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
|
|
|
|
<h1 style="text-align:center;">ROVER COMMAND CENTER</h1>
|
|
|
|
|
|
|
|
<div class="clearfix">
|
|
|
|
|
|
|
|
<div class="section-container">
|
|
|
|
<div class ="movement-control">
|
|
|
|
<h2>Movement Control</h2>
|
|
|
|
<div style="transform: translateY(0px);">
|
|
|
|
<button id="up-arrow" class="button" ><span>⇧</span></button>
|
|
|
|
</div>
|
|
|
|
<div style="transform: translateY(13px);">
|
|
|
|
<button id="left-arrow" class="button"><span>⇦</span></button>
|
|
|
|
<button id="down-arrow" class="button"><span>⇩</span></button>
|
|
|
|
<button id="right-arrow" class="button"><span>⇨</span></button>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="section-container">
|
|
|
|
<div class="sensor-data">
|
|
|
|
<h2>Sensor Data</h2>
|
|
|
|
<ul>
|
|
|
|
|
|
|
|
<li><div class="section-container">
|
|
|
|
<label>Battery Voltage</label>
|
|
|
|
</div>
|
|
|
|
<div class="section-container">
|
2021-05-29 03:54:53 +00:00
|
|
|
<meter id="btry_meter" min="4.0" max="6.0" low ="4.5" optimum="5.0" high="4.8" value="5.8" title="V"></meter>
|
2021-05-28 20:27:27 +00:00
|
|
|
</div>
|
|
|
|
</li>
|
|
|
|
|
2021-05-29 03:54:53 +00:00
|
|
|
|
2021-05-28 20:27:27 +00:00
|
|
|
<li><div class="section-container">
|
|
|
|
<label>Odometer</label>
|
|
|
|
</div>
|
|
|
|
<div class="section-container">
|
2021-05-29 03:54:53 +00:00
|
|
|
<strong id="Odometer">28</strong><strong>mm</strong>
|
2021-05-28 20:27:27 +00:00
|
|
|
</div>
|
|
|
|
</li>
|
2021-05-29 03:54:53 +00:00
|
|
|
|
2021-05-28 20:27:27 +00:00
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
</body>
|
2021-05-29 03:54:53 +00:00
|
|
|
</html>
|