1
0
Fork 0

Add new, more useful spirit level app

master
Gordon Williams 2024-01-22 15:30:17 +00:00
parent a4c822c0f5
commit a98ce79c43
8 changed files with 67 additions and 2 deletions

1
apps/angles/ChangeLog Normal file
View File

@ -0,0 +1 @@
0.01: New App!

49
apps/angles/app.js Normal file
View File

@ -0,0 +1,49 @@
g.clear().setRotation(1);
// g.setRotation ALSO changes accelerometer axes
var avrAngle = undefined;
var history = [];
var R = Bangle.appRect;
var W = g.getWidth();
var H = g.getHeight();
var relativeTo = undefined;
function draw(v) {
if (v===undefined) v = Bangle.getAccel();
// current angle
var d = Math.sqrt(v.y*v.y + v.z*v.z);
var ang = Math.atan2(-v.x, d)*180/Math.PI;
// Median filter
if (history.length > 10) history.shift(); // pull old reading off the start
history.push(ang);
avrAngle = history.slice().sort()[(history.length-1)>>1]; // median filter
// Render
var x = R.x + R.w/2;
var y = R.y + R.h/2;
g.reset().clearRect(R).setFontAlign(0,0);
var displayAngle = avrAngle;
g.setFont("6x15").drawString("ANGLE (DEGREES)", x, R.y2-8);
if (relativeTo!==undefined) {
g.drawString("RELATIVE TO", x,y-50);
g.setFont("Vector:30").drawString(relativeTo.toFixed(1),x,y-30);
y += 20;
displayAngle = displayAngle-relativeTo;
}
g.setFont("Vector:60").drawString(displayAngle.toFixed(1),x,y);
}
draw();
Bangle.on('accel',draw);
// Pressing the button turns relative angle on/off
Bangle.setUI({
mode : "custom",
btn : function(n) {
if (relativeTo===undefined)
relativeTo = avrAngle;
else
relativeTo = undefined;
draw();
}
});

1
apps/angles/icon.js Normal file
View File

@ -0,0 +1 @@
require("heatshrink").decompress(atob("mEw4cA///ov+5lChWMyGuxdzpdj4/lKf4AUkgQPgm0wAiPy2QCBsBkmS6QRNhIRBrVACJlPu2+pdICBcCrVJlvJtIRLifStMl3MtkARKydUyMkzMl0CMKyWWyUk1MkSJXkyR7BogRLgVcydSrVGzLHKgdLyfSpdE3JYKklqTwNJknJYJVkxcSp+pnygKhMs1OSEQOSYhVJl1bCIbBK5Mq7gRCyARJiVbqyPBCIKMKuVM24yBCIIiJnVOqu5CISMKp9JlvJCIRXKpP3nxoCRhUSBwSMNBwaMMgn6yp6DRhUl0mypiMMgM9ksipaMMhMtCINKRhlJmoRBpJuBCBIRGRhUE5I1CpKMLgmZn5ZDGhUAycnRoNMRhTDCsn3tfkRhLnDTwYQLNgSMMUQkyRhbGEkyMKAApFOAH4AGA"))

BIN
apps/angles/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

15
apps/angles/metadata.json Normal file
View File

@ -0,0 +1,15 @@
{
"id": "angles",
"name": "Angles (Spirit Level)",
"shortName": "Angles",
"version": "0.01",
"description": "Shows Angle or Relative angle in degrees (Digital Protractor/Inclinometer). Place Bangle sideways against a surface with the button facing away for best readings.",
"icon": "icon.png",
"screenshots": [{"url":"screenshot.png"}],
"tags": "tool",
"supports": ["BANGLEJS2"],
"storage": [
{"name":"angles.app.js","url":"app.js"},
{"name":"angles.img","url":"icon.js","evaluate":true}
]
}

BIN
apps/angles/screenshot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -1,2 +1 @@
require("heatshrink").decompress(atob("mEwghC/AF8OoMRC6nu8kRiAuT93uGCgWBGCguCGCgsBoMUGCQuBFYMRDAIwQFQUhDAIFCFx/hiUyC4NOGAKMP8MRmYwBjwwBCxkEFAIXBiYwBC4PuC5hxCC4IwCDwPgC5gpBpxxBiMSL4QWMgQpBIIKnEFxsikcxOISODCxkDmUiLIQADFxsjUIQWELp0iLwYuQgMzkUiFydBkcyFycOoMSXoIuST4YuTB4NBZwIuSABAuPAA5dQdSQuBoIXBLwouPiUxGAguOC4imDRh3hC4wuMgBABC44WMgBxBI4wuNgBxCC4MhAoQWNC4IwBU4guOgEBFQVBiguQGAi7PGBCMPGBAuRGAoWSGAYuTAH4AcA=")) require("heatshrink").decompress(atob("mEw4cA///ov+5lChWMyGuxdzpdj4/lKf4AUkgQPgm0wAiPy2QCBsBkmS6QRNhIRBrVACJlPu2+pdICBcCrVJlvJtIRLifStMl3MtkARKydUyMkzMl0CMKyWWyUk1MkSJXkyR7BogRLgVcydSrVGzLHKgdLyfSpdE3JYKklqTwNJknJYJVkxcSp+pnygKhMs1OSEQOSYhVJl1bCIbBK5Mq7gRCyARJiVbqyPBCIKMKuVM24yBCIIiJnVOqu5CISMKp9JlvJCIRXKpP3nxoCRhUSBwSMNBwaMMgn6yp6DRhUl0mypiMMgM9ksipaMMhMtCINKRhlJmoRBpJuBCBIRGRhUE5I1CpKMLgmZn5ZDGhUAycnRoNMRhTDCsn3tfkRhLnDTwYQLNgSMMUQkyRhbGEkyMKAApFOAH4AGA"))

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 12 KiB