1
0
Fork 0
BangleApps/apps/tinyVario/app.js

99 lines
2.9 KiB
JavaScript
Raw Normal View History

2022-05-30 18:00:34 +00:00
Bangle.setBarometerPower(true, "tinyVario");
Bangle.setGPSPower(true, "tinyVario");
require("Font8x16").add(Graphics);
2022-06-02 09:14:16 +00:00
var intTime=10,pressureInterval=100;
2022-05-30 18:00:34 +00:00
var altH = [];
2022-06-09 11:01:58 +00:00
var fAlt=0, fAlt2=0;
2022-06-02 09:14:16 +00:00
var roc=0,rocAvg=0;
2022-05-30 18:00:34 +00:00
var gs;
var lastPressure = Date.now();
var flying=false;
var takeoffTime, flyingTime;
Bangle.on('pressure', function(e) {
if ((fAlt)==0) fAlt=e.altitude;
fAlt=fAlt+(e.altitude-fAlt)*0.1;
2022-06-09 11:01:58 +00:00
fAlt2=fAlt2+(e.altitude-fAlt2)*0.09093;
2022-05-30 18:00:34 +00:00
});
Bangle.on('GPS', function(fix) {
gs=fix.speed;
});
/*setWatch(function() {
2022-06-02 07:48:54 +00:00
}, BTN1);*/
2022-05-30 18:00:34 +00:00
setInterval(function () {
altH.push(fAlt);
2022-06-02 09:14:16 +00:00
while (altH.length>intTime*1000/pressureInterval) altH.shift();
}, pressureInterval);
2022-05-30 18:00:34 +00:00
setInterval(function() {
2022-06-02 09:14:16 +00:00
var y=0;
2022-06-02 07:48:54 +00:00
//gs=100;
//fAlt=7777;
if ((!flying) && ((rocAvg>1) || (rocAvg<-1) || (gs>10))) { //take-off detected
2022-05-30 18:00:34 +00:00
takeoffTime=Date().getTime();
flying=true;
flyingTime=0;
}
if (flying) {
flyingTime=Date().getTime()-takeoffTime;
ftString=(flyingTime / 3600000).toFixed(0)+":"+(flyingTime / 60000 % 60).toFixed(0).padStart(2,'0');
}
2022-06-02 09:14:16 +00:00
if (altH.length==intTime*1000/pressureInterval) {
rocAvg=(altH[altH.length-1]-altH[0])/intTime;
2022-06-09 11:01:58 +00:00
//roc=(altH[altH.length-1]-altH[altH.length-(1000/pressureInterval)]);
roc=(fAlt-fAlt2)*(1000/pressureInterval);
2022-06-02 09:14:16 +00:00
}
2022-05-30 18:00:34 +00:00
var timeStr = require("locale").time(Date(),1);
g.reset();
g.clear();
2022-06-02 07:48:54 +00:00
//draw altitude
g.setFont("8x16",3).setFontAlign(1,-1).drawString((fAlt).toFixed(0)+"m", g.getWidth(), y);
//-------------
y+=16*3;
g.drawLine(24,y-2,g.getWidth(),y-2);
//draw rate of climb
2022-06-09 11:01:58 +00:00
if (rocAvg>0.1) g.setColor(0,1,0);
if (rocAvg<-1) g.setColor(1,0,0);
2022-06-02 07:48:54 +00:00
g.setFont("8x16",3).setFontAlign(1,-1).drawString(rocAvg.toFixed(1), g.getWidth()-20, y);
g.setColor(1,1,1);
g.setFont("8x16",2).setFontAlign(-1,-1).drawString("m", g.getWidth()-20, y);
g.setFont("8x16",2).setFontAlign(-1,-1).drawString("s", g.getWidth()-20, y+20);
g.drawLine(g.getWidth()-20,y+26,g.getWidth()-8,y+26);
//-------------
y+=16*3;
g.drawLine(24,y-2,g.getWidth(),y-2);
//draw groundspeed
2022-05-30 18:00:34 +00:00
if (!isNaN(gs)) {
2022-06-02 07:48:54 +00:00
g.setFont("8x16",3).setFontAlign(1,-1).drawString(gs.toFixed(0), g.getWidth()-20, y);
g.setFont("8x16",1).setFontAlign(-1,-1).drawString("km", g.getWidth()-20, y+4);
g.setFont("8x16",1).setFontAlign(-1,-1).drawString("h", g.getWidth()-20, y+24);
g.drawLine(g.getWidth()-20,y+21,g.getWidth()-8,y+21);
}
//-------------
y+=16*3;
g.drawLine(0,y-2,g.getWidth(),y-2);
g.drawLine(24,0,24,y-2);
g.drawLine(g.getWidth()/2,y-2,g.getWidth()/2,g.getHeight()-1);
2022-05-30 18:00:34 +00:00
g.setColor(1,1,1);
2022-06-02 07:48:54 +00:00
//draw flight time
2022-05-30 18:00:34 +00:00
if (flying) {
g.setFont("8x16",2).setFontAlign(0,-1).drawString(ftString, g.getWidth()*0.75, 14*10+4);
}
2022-06-02 07:48:54 +00:00
//draw time
2022-05-30 18:00:34 +00:00
g.setFont("8x16",2).setFontAlign(0,-1).drawString(timeStr, g.getWidth()/4, 14*10+4);
2022-06-02 07:48:54 +00:00
//draw bar graph
2022-05-30 18:00:34 +00:00
if (roc>0.1) g.setColor(0,1,0);
if (roc<-1) g.setColor(1,0,0);
2022-06-02 07:48:54 +00:00
g.fillRect(0,(y-2)/2,23,Math.clip((y-2)/2-roc*20,0,y-2));
2022-05-30 18:00:34 +00:00
}, 250);