Add speed sensor implementation for Arduino Leonardo. Adapt simulation code to use data from Arduino.

This commit is contained in:
Juho Teperi
2013-05-08 13:24:29 +03:00
parent fab4189347
commit f7df106272
4 changed files with 118 additions and 44 deletions

View File

@@ -1,38 +1,64 @@
window.point = null;
window.traveled = 0;
function move () {
// var dist = localStorage['multiplier'] * c();
var dist = localStorage['multiplier'] * 0.1 * Session.get('speed');
var createRingBuffer = function (length){
var pointer = 0, buffer = [], sum = 0;
return {
push: function (item) {
if (buffer[pointer] > 0) {
sum -= buffer[pointer];
if (sum <= 0) sum = 0;
}
buffer[pointer] = item;
sum += item;
pointer = (length + pointer + 1) % length;
},
sum: function () {
return sum;
}
};
};
var revs = 0;
$(document).bind('keydown', function (e) {
if (e.keyCode > 48 /* 0 */ && e.keyCode <= 57 /* 9 */) {
revs += e.keyCode - 48;
} else if (e.keyCode >= 65 /* a */ && e.keyCode <= 70 /* f */) {
revs += e.keyCode - 65 + 10;
}
if (revs === 0) return;
var dist = revs * c();
revs = 0;
Session.set('distance', Session.get('distance') + dist);
window.traveled += dist;
window.traveled += localStorage['multiplier'] * dist;
if (window.traveled >= window.point.distance) {
var next = Points.findOne({_id: window.point.next});
// Go to next point, if one exists
if (next) {
window.traveled -= next.distance;
window.traveled -= localStorage['multiplier'] * next.distance;
maps.travel(next._id, {route: true});
window.point = next;
}
}
});
var speed_buffer = createRingBuffer(5 * 2);
var prev = 0;
function speedo() {
speed_buffer.push(Session.get('distance') - prev);
prev = Session.get('distance') || 0;
Session.set('speed', speed_buffer.sum() / 5.0);
}
var line = '';
$(document).on('keydown', function (e) {
if (e.keyCode === 13) { // enter
if (line.length >= 1 && line[0] == 'S') {
var speed = Number(line.slice(1));
Session.set('speed', speed);
$('.speedSlider').slider('value', speed);
}
line = '';
} else {
line += String.fromCharCode(e.keyCode);
}
});
setInterval(speedo, 500);
Template.sim.speed = function () {
return Session.get('speed');
@@ -53,7 +79,6 @@ Template.sim.helpers({
window.init_sim = function init_sim() {
var i;
Meteor.autosubscribe(function () {
if (Session.equals('page', 'sim')) {
var route = Routes.findOne({_id: Session.get('route')});
@@ -74,22 +99,7 @@ Meteor.autosubscribe(function () {
maps.lines.route.add(p.latlng);
p = Points.findOne({_id: p.next});
}
i = setInterval(move, 100);
}
$('.speedSlider').slider({
orientation: 'vertical',
range: 'min',
min: 0,
max: 22.2, // m/s
value: 0,
slide: function (event, ui) {
Session.set('speed', ui.value);
}
});
} else {
i = clearInterval(i);
}
});