Repozitář maturitního projektu IVE. Vozítko ovládané přes internet, které sbírá data z modulů.
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

/*
############
# 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);
}
},
});
}