diff --git a/index.html b/index.html
index 29ccfa1..be97f45 100644
--- a/index.html
+++ b/index.html
@@ -26,21 +26,21 @@
-
-
-
+
+
+
-
-
-
+
+
+
-
+
@@ -51,8 +51,8 @@
-
-
+
+
diff --git a/script.js b/script.js
index 2a5f743..5e374cb 100644
--- a/script.js
+++ b/script.js
@@ -55,7 +55,7 @@ class SwerveDrive {
);
}
- drive(velocityX, velocityY, turnSpeed, maxSpeed) {
+ drive(velocityX, velocityY, turnSpeed, maxModuleSpeed) {
// Take in a requested speeds and update every module
this.modules.forEach(module =>
module.calculateState(velocityX, velocityY, turnSpeed)
@@ -63,8 +63,8 @@ class SwerveDrive {
// If any speeds exceed the max speed, normalize down so we don't effect movement direction
const maxCalculated = Math.max(...this.modules.map(m => m.speed), 0);
- if (maxCalculated > maxSpeed) {
- const scale = maxSpeed / maxCalculated;
+ if (maxCalculated > maxModuleSpeed) {
+ const scale = maxModuleSpeed / maxCalculated;
this.modules.forEach(module => {
module.velocity.x *= scale;
module.velocity.y *= scale;
@@ -169,19 +169,33 @@ const preset8WheelBtn = document.getElementById('preset-8wheel');
// Add event listeners for drive controls
vxSlider.addEventListener('input', (e) => {
- vxOutput.textContent = parseFloat(e.target.value).toFixed(1);
+ vxOutput.textContent = parseFloat(e.target.value);
});
+vxOutput.textContent = parseFloat(vxSlider.value);
vySlider.addEventListener('input', (e) => {
- vyOutput.textContent = parseFloat(e.target.value).toFixed(1);
+ vyOutput.textContent = parseFloat(e.target.value);
});
+vyOutput.textContent = parseFloat(vySlider.value);
omegaSlider.addEventListener('input', (e) => {
- omegaOutput.textContent = parseFloat(e.target.value).toFixed(1);
+ omegaOutput.textContent = parseFloat(e.target.value);
});
+omegaOutput.textContent = parseFloat(omegaSlider.value);
maxSpeedSlider.addEventListener('input', (e) => {
- maxSpeedOutput.textContent = parseFloat(e.target.value).toFixed(1);
+ maxSpeedOutput.textContent = parseFloat(e.target.value);
+});
+maxSpeedOutput.textContent = parseFloat(maxSpeedSlider.value);
+
+resetBtn.addEventListener('click', (e) => {
+ vxSlider.value = 0;
+ vySlider.value = 0;
+ omegaSlider.value = 0;
+
+ vxOutput.textContent = parseFloat(vxSlider.value);
+ vyOutput.textContent = parseFloat(vySlider.value);
+ omegaOutput.textContent = parseFloat(omegaSlider.value);
});
@@ -338,7 +352,7 @@ function animate() {
// Update speeds based on sliders
xSpeed = parseFloat(vxSlider.value);
- ySpeed = parseFloat(vySlider.value);
+ ySpeed = -parseFloat(vySlider.value);
turnSpeed = parseFloat(omegaSlider.value);
// Animate the grid with robot movement
@@ -360,7 +374,7 @@ function animate() {
drawGrid(ctx, canvas.width * 2, gridSquareSize, xGridOffset, yGridOffset, robotRotation);
drawRobot(ctx, robot);
- robot.drive(xSpeed, ySpeed, turnSpeed, 500);
+ robot.drive(xSpeed, ySpeed, turnSpeed, parseFloat(maxSpeedSlider.value));
// Do it all over again
ctx.restore();