added save/send button
parent
92cf94c02b
commit
0e511f0220
51
index.html
51
index.html
|
|
@ -75,6 +75,7 @@
|
||||||
<br>
|
<br>
|
||||||
<input type="text" id="input" placeholder="Type message here">
|
<input type="text" id="input" placeholder="Type message here">
|
||||||
<button id="send">Send</button>
|
<button id="send">Send</button>
|
||||||
|
<button id="saveAnimation">Save Animation</button>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
let isInterpolating = false;
|
let isInterpolating = false;
|
||||||
|
|
@ -222,6 +223,56 @@
|
||||||
ctx.lineWidth = 2;
|
ctx.lineWidth = 2;
|
||||||
ctx.stroke();
|
ctx.stroke();
|
||||||
}
|
}
|
||||||
|
document.getElementById('saveAnimation').onclick = async () => {
|
||||||
|
if (!writer) {
|
||||||
|
alert("Serial not connected.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const totalFrames = 400;
|
||||||
|
const buffer = new ArrayBuffer(totalFrames * 5 * 2); // 5 motors × 2 bytes
|
||||||
|
const view = new DataView(buffer);
|
||||||
|
|
||||||
|
for (let frame = 0; frame < totalFrames; frame++) {
|
||||||
|
for (let ch = 0; ch < 5; ch++) {
|
||||||
|
const keyframes = dialKeyframes[ch];
|
||||||
|
let prevFrame = null, nextFrame = null;
|
||||||
|
|
||||||
|
for (let f = frame; f >= 0; f--) {
|
||||||
|
if (keyframes[f] !== undefined) {
|
||||||
|
prevFrame = f;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (let f = frame; f <= totalFrames - 1; f++) {
|
||||||
|
if (keyframes[f] !== undefined) {
|
||||||
|
nextFrame = f;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let value;
|
||||||
|
if (prevFrame !== null && nextFrame !== null && prevFrame !== nextFrame) {
|
||||||
|
const prevVal = keyframes[prevFrame];
|
||||||
|
const nextVal = keyframes[nextFrame];
|
||||||
|
const t = (frame - prevFrame) / (nextFrame - prevFrame);
|
||||||
|
value = Math.round(prevVal + (nextVal - prevVal) * t);
|
||||||
|
} else if (prevFrame !== null) {
|
||||||
|
value = keyframes[prevFrame];
|
||||||
|
} else if (nextFrame !== null) {
|
||||||
|
value = keyframes[nextFrame];
|
||||||
|
} else {
|
||||||
|
value = 512;
|
||||||
|
}
|
||||||
|
|
||||||
|
view.setUint16((frame * 5 + ch) * 2, value, true); // little-endian
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log(buffer);
|
||||||
|
await writer.write(buffer);
|
||||||
|
alert("Animation sent over serial.");
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue