diff --git a/package-lock.json b/package-lock.json index 5ebd079..b7da2ad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "speedometer", - "version": "0.0.82", + "version": "0.0.83", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "speedometer", - "version": "0.0.82", + "version": "0.0.83", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 04642d3..7edaae9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "speedometer", - "version": "0.0.82", + "version": "0.0.83", "description": "Minimal PWA speedometer that displays GPS speed. Includes TypeScript script to render PNG icons from SVG using sharp.", "license": "MIT", "private": true, diff --git a/src/app.ts b/src/app.ts index d54883f..981c8d0 100644 --- a/src/app.ts +++ b/src/app.ts @@ -19,8 +19,10 @@ let lastSpeedMs: number | null = null; // last known native speed (m/s), if any let lastUpdateTimestamp = 0; let wakeLock: WakeLockSentinel | null = null; let firstSpeedTimestamp: number | null = null; +let speedSampleCount = 0; const GPS_WARMUP_MS = 1000; +const MIN_SAMPLES_TO_SKIP_WARMUP = 5; export const PLACEHOLDER = "———"; @@ -261,9 +263,15 @@ function handlePosition(pos: GeolocationPosition): void { if (typeof speed === "number" && Number.isFinite(speed) && speed >= 0) { if (firstSpeedTimestamp === null) { firstSpeedTimestamp = pos.timestamp; + speedSampleCount = 0; } - if (pos.timestamp - firstSpeedTimestamp >= GPS_WARMUP_MS) { + speedSampleCount++; + + if ( + pos.timestamp - firstSpeedTimestamp >= GPS_WARMUP_MS || + speedSampleCount >= MIN_SAMPLES_TO_SKIP_WARMUP + ) { lastSpeedMs = speed; renderSpeed(speed); lastUpdateTimestamp = pos.timestamp; @@ -363,6 +371,7 @@ export function resetState(): void { lastUpdateTimestamp = 0; wakeLock = null; firstSpeedTimestamp = null; + speedSampleCount = 0; } export function init(): void {