xxxxxxxxxx
267
var wifiName = "fablab-droner3";
var wifiPassword = "39nerdro";
var iAmFlying = false;
var speedX = 0;
var speedY = 0;
var speedZ = 0;
var startX = 0;
var startTid = 0;
var endX = 0;
var controllers = [];
function setup() {
frameRate(8);
const canvas = createCanvas(windowWidth, windowHeight);
textFont('Share Tech Mono');
WebSocketStart("ws://localhost:9000");
drones.push(new Drone("192.168.0.174"));
window.addEventListener("gamepadconnected", function(e) {
gamepadHandler(e, true);
console.log("Gamepad connected at index %d: %s. %d buttons, %d axes.",
e.gamepad.index, e.gamepad.id,
e.gamepad.buttons.length, e.gamepad.axes.length);
});
window.addEventListener("gamepaddisconnected", function(e) {
console.log("Gamepad disconnected from index %d: %s",
e.gamepad.index, e.gamepad.id);
colour = color(120, 0, 0)
gamepadHandler(e, false);
});
}
var noSelect = true;
var selectIdx = -1;
function dostuff() {
var gamePads = navigator.getGamepads()
speedX = 0;
speedY = 0;
// speedZ = 0;
background(0);
drawUI();
if (uiButton("Do drone show", color(255, 255, 255), 200, 30, 40, 30).clicked) {
droneCmd("takeoff", true);
droneCmd("mon", true);
droneCmd("go 0 0 100 50 m-1", true);
droneCmd("forward 100", true);
droneCmd("go 0 0 0 50 m-7", true);
droneCmd("back 100", true);
droneCmd("go 0 0 0 50 m-1", true);
droneCmd("land", true);
/* droneCmd("takeoff", true);
droneCmd("right 30", true);
droneCmd("left 30", true);
droneCmd("land", true);
*/
}
var axisOne = 0;
var axisUD = 0;
var rBS = 0;
var lBS = 0;
if ((gamePads[selectIdx] && gamePads[selectIdx].axes)) {
let gamePad = gamePads[selectIdx]
var startKnap = gamePad.buttons[9]
if (gamePad.id.match("Saitek")) {
axisOne = 5;
axisUD = -1 * gamePad.axes[2];
} else {
rBS = gamePad.buttons[7].value
lBS = gamePad.buttons[6].value
axisUD = rBS - lBS;
}
if (axisUD >= 0.9) {
droneCmd("takeoff", false)
iAmFlying = true;
}
}
if ((gamePads[selectIdx] && gamePads[selectIdx].axes) && iAmFlying == true) // er der nogen gamepads?
{
var axes = gamePads[selectIdx].axes
let gamePad = gamePads[selectIdx]
//
/* if (gamePad.state["FACE_1"] == true) {
background(100);
}
if (gamePad.state["FACE_1"]) {
droneCmd("takeoff", true)
}*/
speedX = map(gamePad.axes[1], -1, 1, 100, -100);
speedY = map(gamePad.axes[axisOne], -1, 1, -100, 100);
speedZ = map(axisUD, -1, 1, -100, 100);
//speedZ += map(lBS, 0, 1, 0, -100);
/*
speedZ += map(gamePad.state["LEFT_BOTTOM_SHOULDER"], 0, 1, 0, -100);
*/
//fart
var command = `rc 0 ${round(speedX)} ${round(speedZ)} ${round(speedY)}`;
if (drones[0].queue.length < 1) {
droneCmd(command, false)
}
}
if (drones[0].getStateInfo("mid") == 2) {
if (startX == false) {
startTid = second();
startX = true
}
}
}
if (startX == true) {
fill(250, 0, 0);
textSize(48);
text("Tid: " + (second() - startTid), 350, 45);
/*
if (drones[0].getStateInfo("mid") == 1) {
if (endX == false) {
endX = true
}
}
*/
//gamePadTest();
// simpel version slut
}
function draw() {
if (!noSelect) {
dostuff();
} else {
var gamePads = navigator.getGamepads();
push();
textAlign(CENTER, CENTER);
textSize(32);
fill(255);
text("tryk på en tast for at vælge en controller ", 0, 0, 800, 800);
pop();
let index = 0;
console.log(gamePads[0])
for (let gamePad of gamePads) {
if (gamePad == undefined) {
index++;
continue;
}
if (gamePad.buttons == undefined) {
index++;
continue;
}
console.log(gamePad);
let buttonidx = 0;
for (let button of gamePad.buttons) {
if (buttonPressed(button) && buttonidx != 23) {
noSelect = false;
selectIdx = index;
for (let key in button) {
}
//
}
buttonidx++
}
index++;
}
}
}
function gamePadTest() {
for (i = 0; gamePads !== undefined && i < gamePads.length; i++) {
//
fill(255, 255, 255);
textSize(32);
text(gamePads[i].state["FACE_1"], 100, 100 + 40 * i);
if (gamePads[i].state["FACE_1"]) {
background(100);
}
text(gamePads[i].state["LEFT_STICK_X"], 100 + 40, 100 + 40 * i);
ellipse(map(gamePads[i].state["LEFT_STICK_X"], -1, 1, 0, windowWidth),
map(gamePads[i].state["LEFT_STICK_Y"], -1, 1, 0, windowHeight),
20, 20);
}
}
function gamepadHandler(event, connecting) {
let gamepad = event.gamepad;
if (connecting) {
controllers[gamepad.index] = gamepad
} else {
delete controllers[gamepad.index]
}
}
function buttonPressed(b) {
if (typeof(b) == "object") {
return b.pressed; // binary
}
return b > 0.9; // analog value
}