mirror of https://github.com/espruino/BangleApps
commit
a9a6efc987
|
@ -7,3 +7,4 @@
|
||||||
0.07: Update scaling for new firmware
|
0.07: Update scaling for new firmware
|
||||||
0.08: Don't force backlight on/watch unlocked on Bangle 2
|
0.08: Don't force backlight on/watch unlocked on Bangle 2
|
||||||
0.09: Grey out BPM until confidence is over 50%
|
0.09: Grey out BPM until confidence is over 50%
|
||||||
|
0.10: Autoscale raw graph to maximum value seen
|
||||||
|
|
|
@ -4,7 +4,7 @@ if (process.env.HWVERSION == 1) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Bangle.setHRMPower(1);
|
Bangle.setHRMPower(1);
|
||||||
var hrmInfo, hrmOffset = 0;
|
var hrmInfo = {}, hrmOffset = 0;
|
||||||
var hrmInterval;
|
var hrmInterval;
|
||||||
var btm = g.getHeight()-1;
|
var btm = g.getHeight()-1;
|
||||||
var lastHrmPt = []; // last xy coords we draw a line to
|
var lastHrmPt = []; // last xy coords we draw a line to
|
||||||
|
@ -29,19 +29,34 @@ function onHRM(h) {
|
||||||
hrmInterval = setInterval(readHRM,41);
|
hrmInterval = setInterval(readHRM,41);
|
||||||
}, 40);
|
}, 40);
|
||||||
}
|
}
|
||||||
|
updateHrm();
|
||||||
|
}
|
||||||
|
Bangle.on('HRM', onHRM);
|
||||||
|
|
||||||
|
function updateHrm(){
|
||||||
var px = g.getWidth()/2;
|
var px = g.getWidth()/2;
|
||||||
g.setFontAlign(0,0);
|
g.setFontAlign(0,-1);
|
||||||
g.clearRect(0,24,g.getWidth(),80);
|
g.clearRect(0,24,g.getWidth(),80);
|
||||||
g.setFont("6x8").drawString("Confidence "+hrmInfo.confidence+"%", px, 75);
|
g.setFont("6x8").drawString("Confidence "+(hrmInfo.confidence || "--")+"%", px, 70);
|
||||||
var str = hrmInfo.bpm;
|
|
||||||
|
updateScale();
|
||||||
|
|
||||||
|
g.setFontAlign(0,0);
|
||||||
|
var str = hrmInfo.bpm || "--";
|
||||||
g.setFontVector(40).setColor(hrmInfo.confidence > 50 ? g.theme.fg : "#888").drawString(str,px,45);
|
g.setFontVector(40).setColor(hrmInfo.confidence > 50 ? g.theme.fg : "#888").drawString(str,px,45);
|
||||||
px += g.stringWidth(str)/2;
|
px += g.stringWidth(str)/2;
|
||||||
g.setFont("6x8").setColor(g.theme.fg);
|
g.setFont("6x8").setColor(g.theme.fg);
|
||||||
g.drawString("BPM",px+15,45);
|
g.drawString("BPM",px+15,45);
|
||||||
}
|
}
|
||||||
Bangle.on('HRM', onHRM);
|
|
||||||
|
|
||||||
|
function updateScale(){
|
||||||
|
g.setFontAlign(-1,-1);
|
||||||
|
g.clearRect(2,70,40,78);
|
||||||
|
g.setFont("6x8").drawString(scale, 2, 70);
|
||||||
|
}
|
||||||
|
|
||||||
|
var rawMax = 0;
|
||||||
|
var scale = 2000;
|
||||||
var MID = (g.getHeight()+80)/2;
|
var MID = (g.getHeight()+80)/2;
|
||||||
/* On newer (2v10) firmwares we can subscribe to get
|
/* On newer (2v10) firmwares we can subscribe to get
|
||||||
HRM events as they happen */
|
HRM events as they happen */
|
||||||
|
@ -49,19 +64,27 @@ Bangle.on('HRM-raw', function(v) {
|
||||||
h=v;
|
h=v;
|
||||||
hrmOffset++;
|
hrmOffset++;
|
||||||
if (hrmOffset>g.getWidth()) {
|
if (hrmOffset>g.getWidth()) {
|
||||||
hrmOffset=0;
|
let thousands = Math.round(rawMax / 1000) * 1000;
|
||||||
|
if (thousands > scale) scale = thousands;
|
||||||
|
|
||||||
g.clearRect(0,80,g.getWidth(),g.getHeight());
|
g.clearRect(0,80,g.getWidth(),g.getHeight());
|
||||||
|
updateScale();
|
||||||
|
|
||||||
|
hrmOffset=0;
|
||||||
lastHrmPt = [-100,0];
|
lastHrmPt = [-100,0];
|
||||||
}
|
}
|
||||||
|
if (rawMax < v.raw) {
|
||||||
y = E.clip(btm-(8+v.filt/2000),btm-16,btm);
|
rawMax = v.raw;
|
||||||
|
}
|
||||||
|
y = E.clip(btm-(8+v.filt/3000),btm-24,btm);
|
||||||
g.setColor(1,0,0).fillRect(hrmOffset,btm, hrmOffset, y);
|
g.setColor(1,0,0).fillRect(hrmOffset,btm, hrmOffset, y);
|
||||||
y = E.clip(btm - (v.raw/45),84,btm);
|
y = E.clip(btm - (v.raw/scale*84),84,btm);
|
||||||
g.setColor(g.theme.fg).drawLine(lastHrmPt[0],lastHrmPt[1],hrmOffset, y);
|
g.setColor(g.theme.fg).drawLine(lastHrmPt[0],lastHrmPt[1],hrmOffset, y);
|
||||||
lastHrmPt = [hrmOffset, y];
|
lastHrmPt = [hrmOffset, y];
|
||||||
if (counter !==undefined) {
|
if (counter !==undefined) {
|
||||||
counter = undefined;
|
counter = undefined;
|
||||||
g.clearRect(0,24,g.getWidth(),g.getHeight());
|
g.clearRect(0,24,g.getWidth(),g.getHeight());
|
||||||
|
updateHrm();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -76,7 +99,8 @@ function countDown() {
|
||||||
g.clear();
|
g.clear();
|
||||||
Bangle.loadWidgets();
|
Bangle.loadWidgets();
|
||||||
Bangle.drawWidgets();
|
Bangle.drawWidgets();
|
||||||
g.reset().setFont("6x8",2).setFontAlign(0,0);
|
g.setColor(g.theme.fg);
|
||||||
|
g.reset().setFont("6x8",2).setFontAlign(0,-1);
|
||||||
g.drawString("Please wait...",g.getWidth()/2,g.getHeight()/2 - 16);
|
g.drawString("Please wait...",g.getWidth()/2,g.getHeight()/2 - 16);
|
||||||
countDown();
|
countDown();
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"id": "hrm",
|
"id": "hrm",
|
||||||
"name": "Heart Rate Monitor",
|
"name": "Heart Rate Monitor",
|
||||||
"version": "0.09",
|
"version": "0.10",
|
||||||
"description": "Measure your heart rate and see live sensor data",
|
"description": "Measure your heart rate and see live sensor data",
|
||||||
"icon": "heartrate.png",
|
"icon": "heartrate.png",
|
||||||
"tags": "health",
|
"tags": "health",
|
||||||
|
|
Loading…
Reference in New Issue