[] altimeter: immediately show altitude after calibration changes

pull/3107/head
Pavel Machek 2023-11-19 16:34:18 +01:00
parent ae5bb890e8
commit 0c220b4091
1 changed files with 16 additions and 13 deletions

View File

@ -6,8 +6,7 @@ Bangle.drawWidgets();
var R = Bangle.appRect; var R = Bangle.appRect;
var y = R.y + R.h/2; var y = R.y + R.h/2;
var MEDIANLENGTH = 20; var MEDIANLENGTH = 20;
var avr = [], median; var avr = [];
var value = 0;
function fmt(t) { function fmt(t) {
if ((t > -100) && (t < 1000)) if ((t > -100) && (t < 1000))
@ -20,17 +19,21 @@ function fmt(t) {
Bangle.on('pressure', function(e) { Bangle.on('pressure', function(e) {
while (avr.length>MEDIANLENGTH) avr.pop(); while (avr.length>MEDIANLENGTH) avr.pop();
avr.unshift(e.altitude); avr.unshift(e.altitude);
median = avr.slice().sort(); let median = avr.slice().sort();
g.reset().clearRect(0,y-30,g.getWidth()-10,R.h); g.reset().clearRect(0,y-30,g.getWidth()-10,R.h);
if (median.length>10) { if (median.length>10) {
var mid = median.length>>1; var mid = median.length>>1;
value = E.sum(median.slice(mid-4,mid+5)) / 9; var value = E.sum(median.slice(mid-4,mid+5)) / 9;
} else {
var value = median[median.length>>1];
}
t = fmt(value); t = fmt(value);
g.setFont("Vector",50).setFontAlign(0,0).drawString(t, g.getWidth()/2, y); g.setFont("Vector",50).setFontAlign(0,0).drawString(t, g.getWidth()/2, y);
let o = Bangle.getOptions(); let o = Bangle.getOptions();
let sea = o.seaLevelPressure; let sea = o.seaLevelPressure;
t = fmt(sea) + " " + e.temperature.toFixed(1); t = sea.toFixed(1) + " " + e.temperature.toFixed(1);
if (0) { if (0) {
print("alt raw:", value.toFixed(1)); print("alt raw:", value.toFixed(1));
print("temperature:", e.temperature); print("temperature:", e.temperature);
@ -38,7 +41,6 @@ Bangle.on('pressure', function(e) {
print("sea pressure:", sea); print("sea pressure:", sea);
} }
g.setFont("Vector",25).setFontAlign(-1,0).drawString(t, 10, R.y+R.h - 35); g.setFont("Vector",25).setFontAlign(-1,0).drawString(t, 10, R.y+R.h - 35);
}
}); });
function setPressure(m, a) { function setPressure(m, a) {
@ -46,6 +48,7 @@ function setPressure(m, a) {
print(o); print(o);
o.seaLevelPressure = o.seaLevelPressure * m + a; o.seaLevelPressure = o.seaLevelPressure * m + a;
Bangle.setOptions(o); Bangle.setOptions(o);
avr = [];
} }
print(g.getFonts()); print(g.getFonts());
@ -57,7 +60,7 @@ g.drawString(/*LANG*/"SEA L (hPa) TEMP (C)", g.getWidth()/2, y+62);
g.flip(); g.flip();
g.setFont("6x8").setFontAlign(0,0,3).drawString(/*LANG*/"STD", g.getWidth()-5, g.getHeight()/2); g.setFont("6x8").setFontAlign(0,0,3).drawString(/*LANG*/"STD", g.getWidth()-5, g.getHeight()/2);
Bangle.setUI("updown", btn=> { Bangle.setUI("updown", btn=> {
if (!btn) setPressure(0, 1023.25); if (!btn) setPressure(0, 1013.25);
if (btn<0) setPressure(1, 1); if (btn<0) setPressure(1, 1);
if (btn>0) setPressure(1, -1); if (btn>0) setPressure(1, -1);
}); });