ロボットアーム制御3-1<br />
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@3.x/obniz.js" crossorigin="anonymous" ></script>
Robot Arm obniz ID:<input type="text" id="oid1" style="width: 100px;"><br />
Controller obniz ID:<input type="text" id="oid2" style="width: 100px;"><br />
<button onClick="init();">実行</button><br />
m1: <span id="m1"></span><br />
m2: <span id="m2"></span><br />
m3: <span id="m3"></span><br />
m4: <span id="m4"></span><br />
STS:<div id="sts"></div>
<script>
var obniz1, obniz2;
var servo1, servo2, servo3, servo4;
var m1, m2, m3, m4;
var ag1 = 90;
var ag2 = 90;
var ag3 = 90;
var ag4 = 90;
function init() {
obniz1 = new Obniz($("#oid1").val());
obniz1.onconnect = async function () {
servo1 = obniz1.wired("ServoMotor", {signal:0});
servo2 = obniz1.wired("ServoMotor", {signal:1});
servo3 = obniz1.wired("ServoMotor", {signal:2});
servo4 = obniz1.wired("ServoMotor", {signal:3});
servo1.angle(ag1);
servo2.angle(ag2);
servo3.angle(ag3);
servo4.angle(ag4);
obniz2 = new Obniz($("#oid2").val());
obniz2.onconnect = async function () {
m1 = obniz2.wired("Potentiometer", {pin0:0, pin1:1, pin2:2});
m2 = obniz2.wired("Potentiometer", {pin0:3, pin1:4, pin2:5});
m3 = obniz2.wired("Potentiometer", {pin0:6, pin1:7, pin2:8});
m4 = obniz2.wired("Potentiometer", {pin0:9, pin1:10, pin2:11});
m1.onchange =function(p) {
const v = Math.floor(p * 45) - 6;
$("#m1").html(v);
main(v, 0, 0, 0);
};
m2.onchange =function(p) {
const v = Math.floor(p * 45) - 22;
$("#m2").html(v);
main(0, v, 0, 0);
};
m3.onchange =function(p) {
const v = Math.floor(p * 45) - 22;
$("#m3").html(v);
main(0, 0, v, 0);
};
m4.onchange =function(p) {
const v = Math.floor(p * 45) - 5;
$("#m4").html(v);
main(0, 0, 0, v);
};
};
};
}
async function main(x1, y1, x2, y2) {
if (y1 < -1 || y1 > 1) ag1 += y1 / 2;
ag1 = adjustRange(ag1, 40, 140);
if (x1 < -1 || x1 > 1) ag2 += x1 / 2;
ag2 = adjustRange(ag2, 60, 150);
if (x2 < -1 || x2 > 1) ag3 -= x2 / 2;
ag3 = adjustRange(ag3, 60, 180);
if (y2 < -1 || y2 > 1) ag4 += y2 * 1;
ag4 = adjustRange(ag4, 5, 100);
$("#sts").html(ag1+":"+ag2+":"+ag3+":"+ag4);
await servo1.angle(ag1);
await servo2.angle(ag2);
await servo3.angle(ag3);
await servo4.angle(ag4);
}
function adjustRange(v, vmin, vmax) {
let ret = v;
if (v < vmin) ret = vmin;
if (v > vmax) ret = vmax;
return ret;
}
</script>