1
0
Fork 0
BangleApps/apps/banglebridge/widget.js

300 lines
6.9 KiB
JavaScript

(() => {
/**
* Widget measurements
* Description:
* name: connection.wid.js
*icon: conectionIcon.icon
*
*/
//Font
g.setFont("Vector", 100);
//variabangle.Sensorss
//let acclS, bttS, compssS, gpsS, hrmS, stepS; //Strings
let accelN, compssN, gpsN, hrmN, stepN; //Num
//let prueba = 1;
let data = [0, 0, 0, 0, 0, 0];
//Constants for redabangle.Sensors code
let storage = require('Storage');
//let deCom = require('heatshrink');
//Sensors code
/**
*
* @author Jorge
*/
function accel() {
Bangle.on('accel', function (acc) {
// acc = {x,y,z,diff,mag}
accelN = acc;
});
setInterval(function () {
//acclS = accelN.x + "##" + accelN.y + "##" + accelN.z + "\n" + accelN.diff + "##" + accelN.mag;
data[3] = accelN;
}, 2 * 1000);
}
function btt() {
setInterval(function () {
//bttS = E.getBattery(); //return String
data[2] = E.getBattery();
}, 15 * 1000);
}
function compss() {
Bangle.setCompassPower(1);
Bangle.on('mag', function (mag) {
// mag = {x,y,z,dx,dy,dz,heading}
compssN = mag;
});
setInterval(function () {
/*compssS = "A: " + compssN.x + " ## " + compssN.y + " ## " + compssN.z + "\n" +
"B: " + compssN.dx + " ## " + compssN.dy + " ## " + compssN.dz + " ## " + "\n" +
"C: " + compssN.heading; *///return String
data[4] = compssN;
}, 2 * 1000);
}
function gps() {
Bangle.setGPSPower(1);
Bangle.on('GPS', function (gps) {
// gps = {lat,lon,alt,speed,etc}
gpsN = gps;
});
setInterval(function () {
/*gpsS = "A: " + gpsN.lat + " ## " + gpsN.lon + " ## " + gpsN.alt + "\n" + "B: " + gpsN.speed + " ## " + gpsN.course + " ## " + gpsN.time + "\n" +
"C: " + gpsN.satellites + " ## " + gpsN.fix; *///return String
// work out how to display the current time
var d = new Date();
var year = d.getFullYear();
var month = d.getMonth() + 1;
var finalMonth = 0;
if (month < 10) {
finalMonth = "0" + month;
} else {
finalMonth = month;
}
var day = d.getDate();
var finalDay = 0;
if (day < 10) {
finalDay = "0" + day;
} else {
finalDay = day;
}
var h = d.getHours(),
m = d.getMinutes();
var finalh = 0;
if (h < 10) {
finalh = "0" + h;
} else {
finalh = h;
}
var finalM = 0;
if (m < 10) {
finalM = "0" + m;
} else {
finalM = m;
}
var s = d.getSeconds();
var finalS = 0;
if (s < 10) {
finalS = "0" + s;
} else {
finalS = s;
}
var z = d.getMilliseconds();
//var zFinal = new String(z);
//zFinal = zFinal.replace('.', '');
var completeTime = year + "-" + finalMonth + "-" + finalDay + "T" + finalh + ":" + finalM + ":" + finalS + "." + z + "Z";
//var time = h + ":" + ("0" + m).substr(-2);
gpsN.time = completeTime;
data[5] = gpsN;
}, 2 * 1000);
}
//2021-06-11T19:21:58.000Z
function hrm() {
let msr = [0, 0, 0, 0, 0];
let lastInsert = -1;
function roundInsert(nueva) {
let indexFinal = (lastInsert + 1) % (msr.length);
//console.log("Index ==> "+ index);
msr[indexFinal] = nueva;
//item = nueva;
lastInsert = indexFinal;
}
function normalize(nueva) {
let normalize = 0;
roundInsert(nueva);
msr.forEach(function (number) {
normalize += number;
});
normalize = normalize / msr.length;
return normalize;
}
setInterval(function () {
if (!isNaN(hrmN)) {
hrmN = normalize(hrmN);
var roundedRate = parseFloat(hrmN).toFixed(2);
//hrmS = String.valueOf(roundedRate); //return String
//console.log("array----->" + msr);
data[0] = roundedRate;
}
}, 2 * 1000);
}
function steps() {
Bangle.on('step', s => {
stepN = s;
});
setInterval(function () {
//stepS = String.valueOf(stepN); //return String
data[1] = stepN;
}, 2 * 1000);
}
function initSensors() {
//need power control
Bangle.setHRMPower(1);
Bangle.on('HRM', function (hrm) {
hrmN = hrm.bpm;
});
console.log("Sensors are being Init....");
accel();
btt();
compss();
gps();
hrm();
steps();
}
var flip = 1;
Bangle.on('lcdPower', function (on) {
/*
prueba ++;
Bangle.drawWidgets();
g.setFont("Vector", 45);
g.drawString(prueba,100,200);*/
if (flip == 1) { //when off
flip = 0;
//Bangle.buzz(1000);
} else { //when on
flip = 1;
g.setFont("Vector", 30);
g.drawString(data[0], 65, 180);
Bangle.drawWidgets();
}
});
function draw() {
g.drawImage(storage.read("banglebridge.watch.img"),this.x + 1,this.y + 1);
g.drawImage(storage.read("banglebridge.heart.img"), 145, 167);
}
// Finally add widget
initSensors();
// Bangle.drawWidgets();
// Terminal.println("Running BangleBridge");
data[0] = 80.5;
g.setFont("Vector", 30);
g.drawString(data[0], 65, 180);
// Bangle.drawWidgets();
setInterval(function () {
//console.log("---------------------------------------------------------------");
//console.log(data);
//Bluetooth.println(data[0]);
var measurement = {
hrm: data[0],
step: data[1],
batt: data[2],
acc: data[3],
com: data[4],
gps: data[5]
};
/*
g.drawString(compssS,100,200);
*/
Bluetooth.println(JSON.stringify(measurement) + "#");
//draw();
}, 5 * 1000);
WIDGETS["banglebridge"]={
area: "tl",
width: 10,
draw: draw,
};
})(); //End of Widget