diff --git a/web_app/compass/index.html b/web_app/compass/index.html
index 8228948..82410c3 100644
--- a/web_app/compass/index.html
+++ b/web_app/compass/index.html
@@ -176,7 +176,7 @@
dataPoints.forEach(({ angle, rssi }) => {
const rad = (angle * Math.PI) / 180;
//const length = (120 + rssi) / (radius / 2) * radius;
- const length = ((120 - 90) + (rssi + 90)) * lineCoef; // Scale RSSI to fit within radar
+ var length = ((120 - 90) + (rssi + 90)) * lineCoef; // Scale RSSI to fit within radar
if (length > radius) {
length = radius;
}
@@ -327,6 +327,14 @@
document.body.appendChild(promptDiv);
}
+ function simulateRssi(fox) {
+ if (fox > 35) {
+ return -90;
+ }
+
+ return -Math.sin((Math.PI / 2) * fox / 35) * 80 - Math.random() * 3 - 10;
+ }
+
// Parse Bluetooth data
function parseBTData(data) {
// Match the data format and extract the heading and RSSI values
@@ -360,7 +368,7 @@
const heading = ((headingMax + headingMin + 720 + (headingMax - headingMin > 180 ? 360 : 0)) / 2) % 360;
const rssi = spectrum[0]["R"];
- dataPoints[heading] = { angle: heading, rssi: rssi };
+ dataPoints[Math.trunc(heading)] = { angle: heading, rssi: rssi };
currentPoint = { angle: heading, rssi: rssi };
//if (dataPoints.length > 50) dataPoints.shift(); // Keep only the last 50 points
headingDisplay.textContent = `${heading.toFixed(1)}°`;
@@ -409,18 +417,20 @@
isSimulating = true;
simulateBtn.textContent = "Stop Simulation";
- (function simulate() {
+ dataPoints = [];
+ for (i = 0; i < 360; i++) {
+ dataPoints[i] = { angle: i, rssi: -120 };
+ }
+
+ (function simulate(fox, prevAngle, prevRssi) {
if (!isSimulating) return;
- const angle = Math.random() * 360;
- const rssi = -70 + Math.random() * 30;
- dataPoints.push({ angle, rssi });
- currentPoint = { angle, rssi };
- if (dataPoints.length > 360 * 5) dataPoints.shift();
- headingDisplay.textContent = `${angle.toFixed(1)}°`;
- rssiDisplay.textContent = `${rssi.toFixed(1)} dBm`;
- drawRadar();
- setTimeout(simulate, 100);
- })();
+ const angle = (prevAngle - 12 + Math.random() * 30) % 360; // bias slightly to scan on
+ const rssi = simulateRssi(Math.abs(angle - fox));
+
+ const data = "RSSI_HEADING: '{H:" + angle + ",RSSI:" + rssi + "}'"
+ parseBTData(data); // test actual BT data processing
+ setTimeout(simulate, 100, fox, angle, rssi);
+ })(Math.random() * 360, Math.random() * 360, -70 + Math.random() * 30);
}
});