diff options
Diffstat (limited to 'script.js')
-rw-r--r-- | script.js | 201 |
1 files changed, 0 insertions, 201 deletions
diff --git a/script.js b/script.js deleted file mode 100644 index 1f9ea31..0000000 --- a/script.js +++ /dev/null @@ -1,201 +0,0 @@ -/* Register service worker */ -if (navigator.serviceWorker) { - navigator.serviceWorker.register('/hoverbit-ble/sw.js', {scope: '/hoverbit-ble/'}); -} - -const hoverControlModule = () => { - let _throttle = 0; - let _throttleAcc = 0; - let _rudder = 0; - let _rudderAcc = 0; - let _arm = false; - let _armAcc = false; - - const acc = (accString) => { - accString.match(/[A-Z][-,0-9]+/g).forEach((item, i) => { - switch (item.substring(0, 1)) { - case "T": - _throttleAcc = parseInt(item.substring(1, item.length)); - break; - case "R": - _rudderAcc = parseInt(item.substring(1, item.length)); - break; - case "A": - _armAcc = parseInt(item.substring(1, item.length)) == 1; - if (_armAcc) { - document.body.classList.add("armed"); - } else { - document.body.classList.remove("armed"); - } - break; - case "S": - break; - default: - console.log(`Unkown acc: ${item}`); - } - }); - document.querySelector(".acc-string pre").innerHTML = `T: ${_throttleAcc}, R: ${_rudderAcc}`; - } - - const reset = () => { - setArm(0); - setThrottle(0); - setRudder(0); - } - - const setThrottle = (throttle) => { - if (!_armAcc) { return; } - if (throttle > 100) { throttle = 100; } - if (throttle < 0) { throttle = 0; } - _throttle = throttle; - } - const getThrottle = () => _throttle; - - const setRudder = (rudder) => { - if (!_armAcc) { return; } - if (rudder > 90) { rudder = 90; } - if (rudder < -90) { rudder = -90; } - _rudder = rudder; - } - const getRudder = () => _rudder; - - const setArm = (arm) => { - _arm = arm; - if (!_arm) { - _throttle = 0; - _rudder = 0; - } - } - const getArm = () => _arm; - - return { - acc, - reset, - setThrottle, - getThrottle, - setRudder, - getRudder, - setArm, - getArm - }; -} - -/* Define and initialize things */ -let hoverControl = hoverControlModule(); -let joystickLeft = nipplejs.create({ - zone: document.querySelector(".joystick-left"), - size: 200, - position: {left: '50%', bottom: '50%'}, - mode: "static", - lockX: true -}); -let joystickRight = nipplejs.create({ - zone: document.querySelector(".joystick-right"), - size: 200, - position: {left: '50%', bottom: '50%'}, - mode: "static", - lockY: true -}); -let bDev; - -/* Setup event_listeners */ -joystickLeft.on("move", (evt, data) => { - rudder = ((data.distance * 90) / 100); - if (data.angle.degree > 90) { rudder = rudder * -1; } - hoverControl.setRudder(rudder); -}); -joystickLeft.on("end", (evt, data) => { - hoverControl.setRudder(0); -}); - -joystickRight.on("move", (evt, data) => { - throttle = data.distance; - if (data.angle.degree > 90) { throttle = 0; } - hoverControl.setThrottle(throttle); -}); -joystickRight.on("end", (evt, data) => { - hoverControl.setThrottle(0); -}); - -document.getElementById("btn_arm").addEventListener("click", () => { - hoverControl.setArm(true); -}); - -document.getElementById("btn_disarm").addEventListener("click", () => { - hoverControl.setArm(false); -}); - -document.getElementById("btn_connect").onclick = async () => { - const device = await microbit.requestMicrobit(window.navigator.bluetooth); - bDev = device; - - let connCheckInterval = setInterval(() => { - if (device) { - if (device.gatt.connected) { - document.body.classList.add("connected"); - } else { - hoverControl.reset(); - document.body.classList.remove("connected"); - document.body.classList.remove("armed"); - // clearInterval(connCheckInterval); - device.gatt.disconnect(); - } - } else { - clearInterval(connCheckInterval); - alert("FATAL ERROR, Please reload page..."); - clearInterval(connCheckInterval); - } - }, 500); - - if (device) { - hoverControl.reset(); - const services = await microbit.getServices(device); - - document.querySelector("#btn_disconnect").addEventListener("click", () => { - hoverControl.reset(); - device.gatt.disconnect(); - }); - - if (services.deviceInformationService) { - // logJson(await services.deviceInformationService.readDeviceInformation()); - } - - if (services.uartService) { - services.uartService.addEventListener("receiveText", (event) => { - var elm = document.querySelector(".ping i"); - var newone = elm.cloneNode(true); - elm.parentNode.replaceChild(newone, elm); - - if ((event.detail).indexOf(":") != -1) { - let parts = (event.detail).split(":"); - if (parts[0] == "B") { - document.querySelector(".battery-status").innerHTML = parts[1] + "mV"; - } else if (parts[0] == "ACC") { - console.log(parts[1]); - hoverControl.acc(parts[1]); - } else { console.log(parts); } - } else { - console.log(`Received unknown: ${event.detail}`); - } - }); - - let sendCommands = setInterval(async() => { - if (device) { - if (device.gatt.connected) { - let command = - "T" + hoverControl.getThrottle().toString() + - "R" + hoverControl.getRudder().toString() + - "A" + (hoverControl.getArm() ? "1" : "0") + - "S0" + - ":"; - await services.uartService.sendText(command); - } else { - // clearInterval(sendCommands); - device.gatt.disconnect(); - } - } - }, 70); - - } - } -} |