From bef2955ba07058879df642f54deb142da9cc5303 Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 5 Mar 2021 17:27:05 +1300 Subject: [PATCH] Add Kalman Filter switch on/off to settings menu. --- apps/speedalt/app.js | 15 +++++++++------ apps/speedalt/settings.js | 20 ++++++++++++++++++-- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/apps/speedalt/app.js b/apps/speedalt/app.js index f69b955a1..04bf58380 100644 --- a/apps/speedalt/app.js +++ b/apps/speedalt/app.js @@ -5,7 +5,7 @@ Mike Bennett mike[at]kereru.com 1.21 : Third mode large clock display 1.02 : add smoothing with kalman filter */ -var v = '1.02e'; +var v = '1.02g'; /*kalmanjs, Wouter Bulten, MIT, https://github.com/wouterbulten/kalmanjs */ var KalmanFilter = (function () { @@ -170,9 +170,6 @@ var KalmanFilter = (function () { }()); -var spdFilter = new KalmanFilter({R: 0.1, Q: 1}); -var altFilter = new KalmanFilter({R: 0.01, Q: 2}); - var buf = Graphics.createArrayBuffer(240,160,2,{msb:true}); @@ -416,8 +413,8 @@ function onGPS(fix) { // Smooth data if ( lf.smoothed !== 1 ) { - lf.speed = spdFilter.filter(lf.speed); - lf.alt = altFilter.filter(lf.alt); + if ( cfg.spdFilt ) lf.speed = spdFilter.filter(lf.speed); + if ( cfg.altFilt ) lf.alt = altFilter.filter(lf.alt); lf.smoothed = 1; if ( max.n <= 15 ) max.n++; } @@ -590,6 +587,12 @@ cfg.wp = cfg.wp||0; // Last selected waypoint for dist cfg.modeA = cfg.modeA||0; // 0 = [D]ist, 1 = [A]ltitude, 2 = [C]lock cfg.primSpd = cfg.primSpd||0; // 1 = Spd in primary, 0 = Spd in secondary +cfg.spdFilt = cfg.spdFilt==undefined?true:cfg.spdFilt; +cfg.altFilt = cfg.altFilt==undefined?true:cfg.altFilt; + +if ( cfg.spdFilt ) var spdFilter = new KalmanFilter({R: 0.1 , Q: 1 }); +if ( cfg.altFilt ) var altFilter = new KalmanFilter({R: 0.01, Q: 2 }); + loadWp(); /* diff --git a/apps/speedalt/settings.js b/apps/speedalt/settings.js index 7ecc2b940..6e417da56 100644 --- a/apps/speedalt/settings.js +++ b/apps/speedalt/settings.js @@ -29,13 +29,15 @@ settings.colour = c; writeSettings(); } + const appMenu = { '': {'title': 'GPS Speed Alt'}, '< Back': back, '< Load GPS Adv Sport': ()=>{load('speedalt.app.js');}, 'Units' : function() { E.showMenu(unitsMenu); }, - 'Colours' : function() { E.showMenu(colMenu); }/*, + 'Colours' : function() { E.showMenu(colMenu); }, + 'Kalman Filter' : function() { E.showMenu(kalMenu); }/*, 'Vibrate' : { value : settings.buzz, format : v => v?"On":"Off", @@ -66,7 +68,21 @@ 'Night' : function() { setColour(2); } }; + const kalMenu = { + '': {'title': 'Kalman Filter'}, + 'Speed' : { + value : settings.spdFilt, + format : v => v?"On":"Off", + onchange : () => { settings.spdFilt = !settings.spdFilt; writeSettings(); } + }, + 'Altitude' : { + value : settings.altFilt, + format : v => v?"On":"Off", + onchange : () => { settings.altFilt = !settings.altFilt; writeSettings(); } + } + }; + E.showMenu(appMenu); -}) +});