230 lines
9.0 KiB
HTML
230 lines
9.0 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.bundle.js"></script>
|
|
<script>
|
|
const GRAPH_RES = 100;
|
|
var dataSmartphone = [];
|
|
window.addEventListener("load", function(evt) {
|
|
var orientation = [0,0,0];
|
|
var multiplier = 180/Math.PI/15
|
|
var output = document.getElementById("output");
|
|
var input = document.getElementById("input");
|
|
var ws;
|
|
var print = function(message) {
|
|
var d = document.createElement("div");
|
|
d.textContent = message;
|
|
output.appendChild(d);
|
|
};
|
|
var print2 = function(message) {
|
|
var d = document.createElement("p");
|
|
d.innerText = message;
|
|
oldNode = output.firstChild
|
|
output.replaceChild(d, oldNode)
|
|
};
|
|
document.getElementById("open").onclick = function(evt) {
|
|
if (ws && ws.OPEN) {
|
|
print("Websocket already open")
|
|
return false;
|
|
}
|
|
ws = new WebSocket("{{.}}");
|
|
ws.onopen = function(evt) {
|
|
print("OPEN");
|
|
}
|
|
ws.onclose = function(evt) {
|
|
ws = null;
|
|
print2("CLOSE");
|
|
}
|
|
ws.onmessage = function(evt) {
|
|
//print2("RESPONSE: " + evt.data);
|
|
dataSmartphone.push(evt.data)
|
|
// let dat = JSON.parse(evt.data)["bmi26x gyroscope"]
|
|
// let dat = JSON.parse(evt.data)["lsm6dsm gyroscope"]
|
|
//let dat = JSON.parse(evt.data)["lsm6ds3c gyroscope"]
|
|
let dat = JSON.parse(evt.data)
|
|
//console.log(dat)
|
|
//console.log(dat.orientation)
|
|
document.getElementById("gyroscope").style.transform = `rotateX(${-((dat.orientation[1]+90)%360)}deg) rotateY(${dat.orientation[0]}deg) rotateZ(${-dat.orientation[2]}deg)`
|
|
|
|
|
|
/*
|
|
console.log(dat)
|
|
orientation[0] += dat[0] * multiplier
|
|
orientation[1] += dat[1] * multiplier
|
|
orientation[2] += dat[2] * multiplier
|
|
// dataset.push(orientation[0])
|
|
// while (dataset.length >= 50) {
|
|
// dataset.shift();
|
|
// }
|
|
// addData(orientation[0] / multiplier)
|
|
*/
|
|
addData(dat.orientation[0])
|
|
// addData(dat[0])
|
|
//document.getElementById("gyroscope").style.transform = `rotateX(${-orientation[0]}deg) rotateY(${orientation[1]}deg) rotateZ(${-orientation[2]}deg) translateZ(50px)`
|
|
}
|
|
ws.onerror = function(evt) {
|
|
print("ERROR: " + evt.data);
|
|
}
|
|
return false;
|
|
};
|
|
document.getElementById("send").onclick = function(evt) {
|
|
if (!ws) {
|
|
return false;
|
|
}
|
|
print("SEND: " + input.value);
|
|
ws.send(input.value);
|
|
return false;
|
|
};
|
|
document.getElementById("close").onclick = function(evt) {
|
|
if (!ws) {
|
|
return false;
|
|
}
|
|
ws.close();
|
|
return false;
|
|
};
|
|
});
|
|
|
|
</script>
|
|
<style>
|
|
* { box-sizing: border-box; }
|
|
|
|
body {
|
|
font-family: sans-serif;
|
|
background: #000;
|
|
color: #fff;
|
|
}
|
|
|
|
.scene {
|
|
width: 200px;
|
|
height: 200px;
|
|
border: 0px solid #CCC;
|
|
margin: 160px;
|
|
perspective: 400px;
|
|
}
|
|
|
|
.cube {
|
|
width: 200px;
|
|
height: 200px;
|
|
position: relative;
|
|
transform-style: preserve-3d;
|
|
transform: translateZ(-100px);
|
|
/*transition: transform 25ms;*/
|
|
}
|
|
|
|
.cube.show-front { transform: translateZ(-100px) rotateY( 0deg); }
|
|
.cube.show-right { transform: translateZ(-100px) rotateY( -90deg); }
|
|
.cube.show-back { transform: translateZ(-100px) rotateY(-180deg); }
|
|
.cube.show-left { transform: translateZ(-100px) rotateY( 90deg); }
|
|
.cube.show-top { transform: translateZ(-100px) rotateX( -90deg); }
|
|
.cube.show-bottom { transform: translateZ(-100px) rotateX( 90deg); }
|
|
|
|
.cube__face {
|
|
position: absolute;
|
|
width: 200px;
|
|
height: 200px;
|
|
border: 1px solid white;
|
|
line-height: 200px;
|
|
font-size: 40px;
|
|
font-weight: bold;
|
|
color: white;
|
|
text-align: center;
|
|
}
|
|
|
|
.cube__face--front { background: hsla( 0, 100%, 50%, 0.7); }
|
|
.cube__face--right { background: hsla( 60, 100%, 50%, 0.7); }
|
|
.cube__face--back { background: hsla(120, 100%, 50%, 0.7); }
|
|
.cube__face--left { background: hsla(180, 100%, 50%, 0.7); }
|
|
.cube__face--top { background: hsla(240, 100%, 50%, 0.7); }
|
|
.cube__face--bottom { background: hsla(300, 100%, 50%, 0.7); }
|
|
|
|
.cube__face--front { transform: rotateY( 0deg) translateZ(100px); }
|
|
.cube__face--right { transform: rotateY( 90deg) translateZ(100px); }
|
|
.cube__face--back { transform: rotateY(180deg) translateZ(100px); }
|
|
.cube__face--left { transform: rotateY(-90deg) translateZ(100px); }
|
|
.cube__face--top { transform: rotateX( 90deg) translateZ(100px); }
|
|
.cube__face--bottom { transform: rotateX(-90deg) translateZ(100px); }
|
|
|
|
label { margin-right: 10px; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<table style="font-size: x-small">
|
|
<tr>
|
|
<td valign="top" width="50%">
|
|
<p>Click "Open" to create a connection to the server.
|
|
</p>
|
|
<form>
|
|
<button id="open">Open</button>
|
|
<button id="close">Close</button>
|
|
<p style="display: none" >
|
|
<input id="input" type="text" value="Hello world!">
|
|
<button id="send">Send</button>
|
|
</p>
|
|
</form>
|
|
<div class="scene">
|
|
<div id="gyroscope" class="cube">
|
|
<div class="cube__face cube__face--front">front</div>
|
|
<div class="cube__face cube__face--back">back</div>
|
|
<div class="cube__face cube__face--right">right</div>
|
|
<div class="cube__face cube__face--left">left</div>
|
|
<div class="cube__face cube__face--top">top</div>
|
|
<div class="cube__face cube__face--bottom">bottom</div>
|
|
</div>
|
|
</div>
|
|
<div style="width: 600px; height: 400px;">
|
|
<canvas id="myChart" width="400" height="200"></canvas>
|
|
</div>
|
|
<script>
|
|
var ctx = document.getElementById('myChart').getContext('2d');
|
|
var myChart = new Chart(ctx, {
|
|
type: 'line',
|
|
data: {
|
|
labels: new Array(GRAPH_RES),
|
|
datasets: [{
|
|
label: 'Z',
|
|
backgroundColor: 'rgba(255, 99, 132, 0.2)',
|
|
borderColor: 'rgba(255, 99, 132, 1)',
|
|
borderWidth: 1,
|
|
pointRadius: 0,
|
|
lineTension: 0.5,
|
|
data: new Array(GRAPH_RES)
|
|
}]
|
|
},
|
|
options: {
|
|
scales: {
|
|
yAxes: [{
|
|
ticks: {
|
|
// beginAtZero: true
|
|
min: -100,
|
|
max: 100
|
|
}
|
|
}]
|
|
},
|
|
animation: {
|
|
duration: 0
|
|
}
|
|
}
|
|
});
|
|
myChart.data.labels.fill("", 0, GRAPH_RES);
|
|
myChart.data.datasets.forEach((dataset) => dataset.data.fill(0, 0, GRAPH_RES))
|
|
function addData(data) {
|
|
myChart.data.labels.push("");
|
|
myChart.data.datasets.forEach((dataset) => {
|
|
dataset.data.push(data);
|
|
});
|
|
while (myChart.data.labels.length >= GRAPH_RES) {
|
|
myChart.data.labels.shift();
|
|
myChart.data.datasets.forEach((dataset) => dataset.data.shift())
|
|
}
|
|
myChart.update();
|
|
};
|
|
</script>
|
|
</td>
|
|
<td valign="top" width="50%">
|
|
<div id="output"></div>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</body>
|
|
</html> |