mirror of https://github.com/espruino/BangleApps
parent
096b8721fa
commit
27e8080cef
|
@ -1,8 +1,8 @@
|
||||||
exports.calibrate = () => {
|
exports.calibrate = () => {
|
||||||
const max={x:-32000, y:-32000, z:-32000},
|
var max={x:-32000, y:-32000, z:-32000},
|
||||||
min={x:32000, y:32000, z:32000};
|
min={x:32000, y:32000, z:32000};
|
||||||
const ref = setInterval(()=>{
|
var ref = setInterval(()=>{
|
||||||
const m = Bangle.getCompass();
|
var m = Bangle.getCompass();
|
||||||
max.x = m.x>max.x?m.x:max.x;
|
max.x = m.x>max.x?m.x:max.x;
|
||||||
max.y = m.y>max.y?m.y:max.y;
|
max.y = m.y>max.y?m.y:max.y;
|
||||||
max.z = m.z>max.z?m.z:max.z;
|
max.z = m.z>max.z?m.z:max.z;
|
||||||
|
@ -13,10 +13,10 @@ exports.calibrate = () => {
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
setTimeout(()=>{
|
setTimeout(()=>{
|
||||||
if(ref) clearInterval(ref);
|
if(ref) clearInterval(ref);
|
||||||
const offset = {x:(max.x+min.x)/2,y:(max.y+min.y)/2,z:(max.z+min.z)/2};
|
var offset = {x:(max.x+min.x)/2,y:(max.y+min.y)/2,z:(max.z+min.z)/2};
|
||||||
const delta = {x:(max.x-min.x)/2,y:(max.y-min.y)/2,z:(max.z-min.z)/2};
|
var delta = {x:(max.x-min.x)/2,y:(max.y-min.y)/2,z:(max.z-min.z)/2};
|
||||||
const avg = (delta.x+delta.y+delta.z)/3;
|
var avg = (delta.x+delta.y+delta.z)/3;
|
||||||
const scale = {x:avg/delta.x, y:avg/delta.y, z:avg/delta.z};
|
var scale = {x:avg/delta.x, y:avg/delta.y, z:avg/delta.z};
|
||||||
resolve({offset:offset,scale:scale});
|
resolve({offset:offset,scale:scale});
|
||||||
},20000);
|
},20000);
|
||||||
});
|
});
|
||||||
|
@ -27,22 +27,22 @@ exports.tiltfix = (m,g,O,S) => {
|
||||||
if (O & S) {
|
if (O & S) {
|
||||||
m.dx =(m.x-O.x)*S.x; m.dy=(m.y-O.y)*S.y; m.dz=(m.z-O.z)*S.z;
|
m.dx =(m.x-O.x)*S.x; m.dy=(m.y-O.y)*S.y; m.dz=(m.z-O.z)*S.z;
|
||||||
}
|
}
|
||||||
let d = Math.atan2(-m.dx,m.dy)*180/Math.PI;
|
var d = Math.atan2(-m.dx,m.dy)*180/Math.PI;
|
||||||
if (d<0) d+=360;
|
if (d<0) d+=360;
|
||||||
const phi = Math.atan(-g.x/-g.z);
|
var phi = Math.atan(-g.x/-g.z);
|
||||||
const cosphi = Math.cos(phi), sinphi = Math.sin(phi);
|
var cosphi = Math.cos(phi), sinphi = Math.sin(phi);
|
||||||
const theta = Math.atan(-g.y/(-g.x*sinphi-g.z*cosphi));
|
var theta = Math.atan(-g.y/(-g.x*sinphi-g.z*cosphi));
|
||||||
const costheta = Math.cos(theta), sintheta = Math.sin(theta);
|
var costheta = Math.cos(theta), sintheta = Math.sin(theta);
|
||||||
const xh = m.dy*costheta + m.dx*sinphi*sintheta + m.dz*cosphi*sintheta;
|
var xh = m.dy*costheta + m.dx*sinphi*sintheta + m.dz*cosphi*sintheta;
|
||||||
const yh = m.dz*sinphi - m.dx*cosphi;
|
var yh = m.dz*sinphi - m.dx*cosphi;
|
||||||
let psi = Math.atan2(yh,xh)*180/Math.PI;
|
var psi = Math.atan2(yh,xh)*180/Math.PI;
|
||||||
if (psi<0) psi+=360;
|
if (psi<0) psi+=360;
|
||||||
return psi;
|
return psi;
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.tiltfixread = (O,S) => {
|
exports.tiltfixread = (O,S) => {
|
||||||
"ram"
|
"ram"
|
||||||
const mag = Bangle.getCompass({noTiltComp: true});
|
var m = Bangle.getCompass({noTiltComp: true});
|
||||||
const acc = Bangle.getAccel();
|
var g = Bangle.getAccel();
|
||||||
return exports.tiltfix(mag,acc,O,S);
|
return exports.tiltfix(m,g,O,S);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue