You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
3.0 KiB
149 lines
3.0 KiB
/*
|
|
############
|
|
# COMMANDS #
|
|
############
|
|
|
|
COMMAND_CONTINUE
|
|
COMMAND_STOP
|
|
COMMAND_RIDE_FORWARD
|
|
COMMAND_FORWARD_STEER_LEFT
|
|
COMMAND_FORWARD_STEER_RIGHT
|
|
COMMAND_RIDE_BACKWARD
|
|
COMMAND_BACKWARD_STEER_LEFT
|
|
COMMAND_BACKWARD_STEER_RIGHT
|
|
COMMAND_TURN_LEFT
|
|
COMMAND_TURN_RIGHT
|
|
|
|
COMMAND_SEND_STATE
|
|
|
|
COMMAND_SET_PWM_BYTE
|
|
COMMAND_SET_SPEED_LEVEL
|
|
COMMAND_SET_SAFE_STOP_INTENSITY
|
|
COMMAND_SET_FREE_SPACE_MULTIPLIER
|
|
*/
|
|
|
|
|
|
var pressed_keys = new Set();
|
|
var command = null;
|
|
// pressed_keys.add("UP");
|
|
|
|
setInterval(function(){
|
|
document.getElementById("keys").innerHTML = Array.from(pressed_keys).join(' ');
|
|
}, 50);
|
|
|
|
setInterval(function(){
|
|
document.getElementById("command").innerHTML = command;
|
|
}, 50)
|
|
|
|
setInterval(function(){
|
|
if (document.visibilityState == "visible") {
|
|
send_command('COMMAND_CONTINUE');
|
|
}
|
|
}, 1000);
|
|
|
|
|
|
document.addEventListener('keydown', function(event) {
|
|
switch (event.code){
|
|
case 'ArrowUp':
|
|
pressed_keys.add("UP");
|
|
break;
|
|
case 'ArrowDown':
|
|
pressed_keys.add("DOWN");
|
|
break;
|
|
case 'ArrowLeft':
|
|
pressed_keys.add("LEFT");
|
|
break;
|
|
case 'ArrowRight':
|
|
pressed_keys.add("RIGHT");
|
|
break;
|
|
}
|
|
|
|
update_state();
|
|
});
|
|
|
|
document.addEventListener('keyup', function(event) {
|
|
switch (event.code){
|
|
case 'ArrowUp':
|
|
pressed_keys.delete("UP");
|
|
break;
|
|
case 'ArrowDown':
|
|
pressed_keys.delete("DOWN");
|
|
break;
|
|
case 'ArrowLeft':
|
|
pressed_keys.delete("LEFT");
|
|
break;
|
|
case 'ArrowRight':
|
|
pressed_keys.delete("RIGHT");
|
|
break;
|
|
}
|
|
|
|
update_state();
|
|
});
|
|
|
|
|
|
function update_state() {
|
|
if (pressed_keys.size == 0) {
|
|
command = "COMMAND_STOP";
|
|
send_command(command);
|
|
return;
|
|
}
|
|
else if (pressed_keys.size > 2) {
|
|
command = 'COMMAND_CONTINUE';
|
|
return;
|
|
}
|
|
else {
|
|
command = map_key_with_command(pressed_keys);
|
|
send_command(command);
|
|
return;
|
|
}
|
|
}
|
|
|
|
function map_key_with_command(pressed_keys) {
|
|
if (pressed_keys.has("UP")) {
|
|
if (pressed_keys.size == 1)
|
|
return "COMMAND_RIDE_FORWARD";
|
|
else if (pressed_keys.has("LEFT"))
|
|
return "COMMAND_FORWARD_STEER_LEFT";
|
|
else if (pressed_keys.has("RIGHT"))
|
|
return "COMMAND_FORWARD_STEER_RIGHT";
|
|
else if (pressed_keys.has("DOWN")) {
|
|
return "COMMAND_STOP";
|
|
}
|
|
}
|
|
|
|
else if (pressed_keys.has("DOWN")) {
|
|
if (pressed_keys.size == 1)
|
|
return "COMMAND_RIDE_BACKWARD";
|
|
else if (pressed_keys.has("LEFT"))
|
|
return "COMMAND_BACKWARD_STEER_LEFT";
|
|
else if (pressed_keys.has("RIGHT"))
|
|
return "COMMAND_BACKWARD_STEER_RIGHT";
|
|
}
|
|
|
|
else if (pressed_keys.has("LEFT")) {
|
|
return "COMMAND_TURN_LEFT";
|
|
}
|
|
|
|
else if (pressed_keys.has("RIGHT")) {
|
|
return "COMMAND_TURN_RIGHT";
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
function send_command(command) {
|
|
$.ajax({
|
|
headers: { "X-CSRFToken": csrf_token },
|
|
url: send_command_url,
|
|
type: 'post',
|
|
dataType: 'json',
|
|
data: {
|
|
command : command,
|
|
},
|
|
success: function(response){
|
|
if (response.status == "ERROR") {
|
|
alert(response.message);
|
|
}
|
|
},
|
|
});
|
|
}
|