ラズパイカーの操作性をちょっと向上させる改造をしました。 sinatraで作ったコントロール画面のJavaScriptに機能追加して、キーボードで各モーターを制御できるようにしました。この手のパターンを展開するコードはCopilotが得意で、サクサクと提案が出てきます。人間が決めるのは、どのキーにどの役割を割り当てるかという部分くらい。
今回、一番の苦労ポイントは動画撮影(笑) 撮ってたつもりが再生ボタンが押せてなかったり、トリミングしたらデータが壊れたり。この辺り手法を固めてく必要があるかおしれません。
// show range value in text
function setSpeed(id,newValue) {
document.getElementById("value-"+id).innerHTML = Number(newValue).toFixed(2);
// send speed to server using fetch API
fetch("/set-speed?motor="+id+"&speed="+newValue);
document.getElementById("range-"+id).value = Number(newValue).toFixed(2);
}
function addSpeed(id,delta) {
let newValue = parseFloat(document.getElementById("range-"+id).value) + delta;
if (newValue > 1.0) {
newValue = 1.0;
}
if (newValue < -1.0) {
newValue = -1.0;
}
document.getElementById("range-"+id).value = newValue;
setSpeed(id,newValue);
}
document.getElementById("range-left").oninput = function() {
setSpeed(this.id.replace("range-",""),this.value);
};
document.getElementById("range-right").oninput = function() {
setSpeed(this.id.replace("range-",""),this.value);
};
document.getElementById("stop").onclick = function() {
document.getElementById("range-left").value = 0;
document.getElementById("range-right").value = 0;
setSpeed("left","0.0");
setSpeed("right","0.0");
};
setSpeed("left","0.0");
setSpeed("right","0.0");
window.addEventListener("keydown", (e) => {
switch(e.key){
case "w":
addSpeed("left",0.1);
break;
case "x":
setSpeed("left","0.0");
break;
case "s":
addSpeed("left",-0.1);
break;
case "o":
addSpeed("right",0.1);
break;
case ".":
setSpeed("right","0.0");
break;
case "l":
addSpeed("right",-0.1);
break;
}
});