BangleApps/apps/hrm/heartrate.js

87 lines
2.1 KiB
JavaScript
Raw Normal View History

2019-11-06 22:12:54 +00:00
Bangle.setLCDPower(1);
Bangle.setLCDTimeout(0);
Bangle.setHRMPower(1);
var hrmInfo, hrmOffset = 0;
var hrmInterval;
function onHRM(h) {
if (counter!==undefined) {
2021-05-28 10:58:08 +00:00
// the first time we're called remove
// the countdown
counter = undefined;
g.clear();
}
hrmInfo = h;
2021-05-28 10:58:08 +00:00
/* On 2v09 and earlier firmwares the only solution for realtime
HRM was to look at the 'raw' array that got reported. If you timed
it right you could grab the data pretty much as soon as it was written.
In new firmwares, '.raw' is not available. */
if (hrmInterval) clearInterval(hrmInterval);
hrmInterval = undefined;
2021-05-28 10:58:08 +00:00
if (hrmInfo.raw) {
hrmOffset = 0;
setTimeout(function() {
hrmInterval = setInterval(readHRM,41);
}, 40);
}
var px = g.getWidth()/2;
g.setFontAlign(0,0);
g.clearRect(0,24,239,90);
g.setFont("6x8").drawString("Confidence "+hrmInfo.confidence+"%", px, 75);
var str = hrmInfo.bpm;
g.setFontVector(40).drawString(str,px,45);
px += g.stringWidth(str)/2;
g.setFont("6x8");
g.drawString("BPM",px+15,45);
}
Bangle.on('HRM', onHRM);
2021-05-28 10:58:08 +00:00
/* On newer (2v10) firmwares we can subscribe to get
HRM events as they happen */
Bangle.on('HRM-raw', function(v) {
var a = v.raw;
hrmOffset++;
if (hrmOffset>g.getWidth()) {
hrmOffset=0;
g.clearRect(0,90,239,239);
g.moveTo(-100,0);
}
y = E.clip(170 - (v.raw*2),100,230);
g.setColor(1,1,1);
g.lineTo(hrmOffset, y);
});
// It takes 5 secs for us to get the first HRM event
var counter = 5;
function countDown() {
2021-05-28 10:58:08 +00:00
if (counter) {
g.drawString(counter--,g.getWidth()/2,g.getHeight()/2, true);
setTimeout(countDown, 1000);
}
}
2021-05-28 10:58:08 +00:00
g.clear().setFont("6x8",2).setFontAlign(0,0);
g.drawString("Please wait...",g.getWidth()/2,g.getHeight()/2 - 16);
countDown();
2019-11-06 22:12:54 +00:00
var wasHigh = 0, wasLow = 0;
var lastHigh = getTime();
var hrmList = [];
var hrmInfo;
2019-11-06 22:12:54 +00:00
function readHRM() {
if (!hrmInfo) return;
if (hrmOffset==0) {
2019-11-13 17:03:41 +00:00
g.clearRect(0,100,239,239);
g.moveTo(-100,0);
2019-11-06 22:12:54 +00:00
}
for (var i=0;i<2;i++) {
var a = hrmInfo.raw[hrmOffset];
hrmOffset++;
y = E.clip(170 - (a*2),100,230);
g.setColor(1,1,1);
g.lineTo(hrmOffset, y);
2019-11-06 22:12:54 +00:00
}
}