forked from FOSS/BangleApps
Add new, more useful spirit level app
parent
a4c822c0f5
commit
a98ce79c43
|
@ -0,0 +1 @@
|
|||
0.01: New App!
|
|
@ -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();
|
||||
}
|
||||
});
|
|
@ -0,0 +1 @@
|
|||
require("heatshrink").decompress(atob("mEw4cA///ov+5lChWMyGuxdzpdj4/lKf4AUkgQPgm0wAiPy2QCBsBkmS6QRNhIRBrVACJlPu2+pdICBcCrVJlvJtIRLifStMl3MtkARKydUyMkzMl0CMKyWWyUk1MkSJXkyR7BogRLgVcydSrVGzLHKgdLyfSpdE3JYKklqTwNJknJYJVkxcSp+pnygKhMs1OSEQOSYhVJl1bCIbBK5Mq7gRCyARJiVbqyPBCIKMKuVM24yBCIIiJnVOqu5CISMKp9JlvJCIRXKpP3nxoCRhUSBwSMNBwaMMgn6yp6DRhUl0mypiMMgM9ksipaMMhMtCINKRhlJmoRBpJuBCBIRGRhUE5I1CpKMLgmZn5ZDGhUAycnRoNMRhTDCsn3tfkRhLnDTwYQLNgSMMUQkyRhbGEkyMKAApFOAH4AGA"))
|
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
|
@ -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}
|
||||
]
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 2.4 KiB |
|
@ -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 |
Loading…
Reference in New Issue