compass: eliminate flickering

master
Ben Whittaker 2020-05-27 20:48:51 -04:00
parent aba59bd2c2
commit cc4757537a
3 changed files with 44 additions and 26 deletions

View File

@ -269,7 +269,7 @@
{ "id": "compass", { "id": "compass",
"name": "Compass", "name": "Compass",
"icon": "compass.png", "icon": "compass.png",
"version":"0.02", "version":"0.03",
"description": "Simple compass that points North", "description": "Simple compass that points North",
"tags": "tool,outdoors", "tags": "tool,outdoors",
"storage": [ "storage": [

View File

@ -1,2 +1,3 @@
0.01: New App! 0.01: New App!
0.02: Show text if uncalibrated 0.02: Show text if uncalibrated
0.03: Eliminate flickering

View File

@ -1,43 +1,60 @@
g.clear(); var tg = Graphics.createArrayBuffer(120,20,1,{msb:true});
g.setColor(0,0.5,1); var timg = {
g.fillCircle(120,130,80,80); width:tg.getWidth(),
g.setColor(0,0,0); height:tg.getHeight(),
g.fillCircle(120,130,70,70); bpp:1,
buffer:tg.buffer
};
var ag = Graphics.createArrayBuffer(160,160,2,{msb:true});
var aimg = {
width:ag.getWidth(),
height:ag.getHeight(),
bpp:2,
buffer:ag.buffer,
palette:new Uint16Array([0,0x03FF,0xF800,0x001F])
};
ag.setColor(1);
ag.fillCircle(80,80,79,79);
ag.setColor(0);
ag.fillCircle(80,80,69,69);
function arrow(r,c) { function arrow(r,c) {
r=r*Math.PI/180; r=r*Math.PI/180;
var p = Math.PI/2; var p = Math.PI/2;
g.setColor(c); ag.setColor(c);
g.fillPoly([ ag.fillPoly([
120+60*Math.sin(r), 130-60*Math.cos(r), 80+60*Math.sin(r), 80-60*Math.cos(r),
120+10*Math.sin(r+p), 130-10*Math.cos(r+p), 80+10*Math.sin(r+p), 80-10*Math.cos(r+p),
120+10*Math.sin(r+-p), 130-10*Math.cos(r-p), 80+10*Math.sin(r-p), 80-10*Math.cos(r-p),
]); ]);
} }
var oldHeading = 0; var oldHeading = 0;
Bangle.on('mag', function(m) { Bangle.on('mag', function(m) {
if (!Bangle.isLCDOn()) return; if (!Bangle.isLCDOn()) return;
g.setFont("6x8",3); tg.clear();
g.setColor(0); tg.setFont("6x8",1);
g.fillRect(0,0,230,40); tg.setColor(1);
g.setColor(0xffff);
if (isNaN(m.heading)) { if (isNaN(m.heading)) {
g.setFontAlign(-1,-1); tg.setFontAlign(0,-1);
g.setFont("6x8",2); tg.setFont("6x8",1);
g.drawString("Uncalibrated",50,12); tg.drawString("Uncalibrated",60,4);
g.drawString("turn 360° around",25,26); tg.drawString("turn 360° around",60,12);
} }
else { else {
g.setFontAlign(0,0); tg.setFontAlign(0,0);
g.setFont("6x8",3); tg.setFont("6x8",2);
g.drawString(Math.round(m.heading),120,12); tg.drawString(Math.round(m.heading),60,12);
} }
g.setColor(0,0,0); g.drawImage(timg,0,0,{scale:2});
ag.setColor(0);
arrow(oldHeading,0); arrow(oldHeading,0);
arrow(oldHeading+180,0); arrow(oldHeading+180,0);
arrow(m.heading,0xF800); arrow(m.heading,2);
arrow(m.heading+180,0x001F); arrow(m.heading+180,3);
g.drawImage(aimg,40,50);
oldHeading = m.heading; oldHeading = m.heading;
}); });
Bangle.setCompassPower(1); Bangle.setCompassPower(1);