Removed debug outputs, fixed rendering for upper limit, improved rendering for +/- icons, changelog version order fixed

pull/224/head
msdeibel 2020-04-04 16:31:41 +02:00
parent d4ab3c075d
commit 72d389e1da
3 changed files with 73 additions and 67 deletions

View File

@ -867,7 +867,7 @@
{ "id": "wohrm", { "id": "wohrm",
"name": "Workout HRM", "name": "Workout HRM",
"icon": "app.png", "icon": "app.png",
"version":"0.05", "version":"0.06",
"description": "Workout heart rate monitor notifies you with a buzz if your heart rate goes above or below the set limits.", "description": "Workout heart rate monitor notifies you with a buzz if your heart rate goes above or below the set limits.",
"tags": "hrm,workout", "tags": "hrm,workout",
"type": "app", "type": "app",

View File

@ -1,5 +1,6 @@
0.05: Improved buzz timing and rendering
0.04: Only buzz on high confidence (>85%)
0.03: Optimized rendering for the background
0.02: Adapted to new App code layout
0.01: Only tested on the emulator. 0.01: Only tested on the emulator.
0.02: Adapted to new App code layout
0.03: Optimized rendering for the background
0.04: Only buzz on high confidence (>85%)
0.05: Improved buzz timing and rendering
0.06: Removed debug outputs, fixed rendering for upper limit, improved rendering for +/- icons, changelog version order fixed

View File

@ -1,10 +1,10 @@
/* eslint-disable no-undef */ /* eslint-disable no-undef */
const Setter = { const Setter = {
NONE: "none", NONE: "none",
UPPER: 'upper', UPPER: 'upper',
LOWER: 'lower' LOWER: 'lower'
}; };
const shortBuzzTimeInMs = 80; const shortBuzzTimeInMs = 80;
const longBuzzTimeInMs = 400; const longBuzzTimeInMs = 400;
@ -77,11 +77,11 @@ function drawTrainingHeartRate() {
//Only redraw if the display is on //Only redraw if the display is on
if (Bangle.isLCDOn()) { if (Bangle.isLCDOn()) {
renderUpperLimit(); renderUpperLimit();
renderCurrentHeartRate(); renderCurrentHeartRate();
renderLowerLimit(); renderLowerLimit();
renderConfidenceBars(); renderConfidenceBars();
} }
@ -90,24 +90,24 @@ function drawTrainingHeartRate() {
function renderUpperLimit() { function renderUpperLimit() {
if(!upperLimitChanged) { return; } if(!upperLimitChanged) { return; }
g.setColor(1,0,0); g.setColor(1,0,0);
g.fillRect(125,40, 210, 70); g.fillRect(125,40, 210, 70);
if(limitSetter === Setter.UPPER){ if(limitSetter === Setter.UPPER){
g.setColor(255,255, 0); g.setColor(255,255, 0);
} else { } else {
g.setColor(255,255,255); g.setColor(255,255,255);
} }
g.setFontVector(13); g.setFontVector(13);
g.drawString("Upper : " + upperLimit, 130,50); g.drawString("Upper: " + upperLimit, 125, 50);
upperLimitChanged = false; upperLimitChanged = false;
} }
function renderCurrentHeartRate() { function renderCurrentHeartRate() {
if(!hrChanged) { return; } if(!hrChanged) { return; }
g.setColor(255,255,255); g.setColor(255,255,255);
g.fillRect(55, 110, 165, 150); g.fillRect(55, 110, 165, 150);
@ -121,27 +121,27 @@ function renderCurrentHeartRate() {
hrChanged = false; hrChanged = false;
} }
function renderLowerLimit() { function renderLowerLimit() {
if(!lowerLimitChanged) { return; } if(!lowerLimitChanged) { return; }
g.setColor(0,0,1); g.setColor(0,0,1);
g.fillRect(10, 180, 100, 210); g.fillRect(10, 180, 100, 210);
if(limitSetter === Setter.LOWER){ if(limitSetter === Setter.LOWER){
g.setColor(255,255, 0); g.setColor(255,255, 0);
} else { } else {
g.setColor(255,255,255); g.setColor(255,255,255);
} }
g.setFontVector(13); g.setFontVector(13);
g.drawString("Lower : " + lowerLimit, 20,190); g.drawString("Lower: " + lowerLimit, 20,190);
lowerLimitChanged = false; lowerLimitChanged = false;
} }
function renderConfidenceBars(){ function renderConfidenceBars(){
if(!confidenceChanged) { return; } if(!confidenceChanged) { return; }
if(hrConfidence >= 85){ if(hrConfidence >= 85){
g.setColor(0, 255, 0); g.setColor(0, 255, 0);
} else if (hrConfidence >= 50) { } else if (hrConfidence >= 50) {
@ -157,42 +157,51 @@ function renderConfidenceBars(){
confidenceChanged = false; confidenceChanged = false;
} }
function renderButtonIcons() { function renderPlusMinusIcons() {
g.setColor(255,255,255); if (limitSetter === Setter.NONE) {
g.setColor(0, 0, 0);
} else {
g.setColor(1, 1, 1);
}
g.setFontVector(14); g.setFontVector(14);
//+ for Btn1 //+ for Btn1
g.drawString("+", 222,50); g.drawString("+", 222, 50);
//- for Btn3
g.drawString("-", 222,165);
return;
}
function renderHomeIcon() {
//Home for Btn2 //Home for Btn2
g.setColor(1, 1, 1);
g.drawLine(220, 118, 227, 110); g.drawLine(220, 118, 227, 110);
g.drawLine(227, 110, 234, 118); g.drawLine(227, 110, 234, 118);
g.drawPoly([222,117,222,125,232,125,232,117], false); g.drawPoly([222,117,222,125,232,125,232,117], false);
g.drawRect(226,120,229,125); g.drawRect(226,120,229,125);
//- for Btn3
g.drawString("-", 222,165);
} }
function buzz() function buzz() {
{
// Do not buzz if not confident // Do not buzz if not confident
if(hrConfidence < 85) { return; } if(hrConfidence < 85) { return; }
if(currentHeartRate > upperLimit) if(currentHeartRate > upperLimit)
{ {
Bangle.buzz(shortBuzzTimeInMs); Bangle.buzz(shortBuzzTimeInMs);
setTimeout(() => { Bangle.buzz(shortBuzzTimeInMs); }, shortBuzzTimeInMs * 2); setTimeout(() => { Bangle.buzz(shortBuzzTimeInMs); }, shortBuzzTimeInMs * 2);
} }
if(currentHeartRate < lowerLimit) if(currentHeartRate < lowerLimit)
{ {
Bangle.buzz(longBuzzTimeInMs); Bangle.buzz(longBuzzTimeInMs);
} }
} }
function onHrm(hrm){ function onHrm(hrm){
if(currentHeartRate !== hrm.bpm){ if(currentHeartRate !== hrm.bpm){
currentHeartRate = hrm.bpm; currentHeartRate = hrm.bpm;
@ -204,97 +213,93 @@ function onHrm(hrm){
confidenceChanged = true; confidenceChanged = true;
} }
} }
function setLimitSetterToLower() { function setLimitSetterToLower() {
resetHighlightTimeout(); resetHighlightTimeout();
limitSetter = Setter.LOWER; limitSetter = Setter.LOWER;
console.log("Limit setter is lower");
upperLimitChanged = true; upperLimitChanged = true;
lowerLimitChanged = true; lowerLimitChanged = true;
renderUpperLimit(); renderUpperLimit();
renderLowerLimit(); renderLowerLimit();
renderPlusMinusIcons();
} }
function setLimitSetterToUpper() { function setLimitSetterToUpper() {
resetHighlightTimeout(); resetHighlightTimeout();
limitSetter = Setter.UPPER; limitSetter = Setter.UPPER;
console.log("Limit setter is upper");
upperLimitChanged = true; upperLimitChanged = true;
lowerLimitChanged = true; lowerLimitChanged = true;
renderLowerLimit(); renderLowerLimit();
renderUpperLimit(); renderUpperLimit();
renderPlusMinusIcons();
} }
function setLimitSetterToNone() { function setLimitSetterToNone() {
limitSetter = Setter.NONE; limitSetter = Setter.NONE;
console.log("Limit setter is none");
upperLimitChanged = true; upperLimitChanged = true;
lowerLimitChanged = true; lowerLimitChanged = true;
renderLowerLimit(); renderLowerLimit();
renderUpperLimit(); renderUpperLimit();
renderPlusMinusIcons();
} }
function incrementLimit(){ function incrementLimit() {
resetHighlightTimeout(); resetHighlightTimeout();
if (limitSetter === Setter.UPPER) { if (limitSetter === Setter.UPPER) {
upperLimit++; upperLimit++;
renderUpperLimit(); renderUpperLimit();
console.log("Upper limit: " + upperLimit);
upperLimitChanged = true; upperLimitChanged = true;
} else if(limitSetter === Setter.LOWER) { } else if(limitSetter === Setter.LOWER) {
lowerLimit++; lowerLimit++;
renderLowerLimit(); renderLowerLimit();
console.log("Lower limit: " + lowerLimit);
lowerLimitChanged = true; lowerLimitChanged = true;
} }
} }
function decrementLimit(){ function decrementLimit(){
resetHighlightTimeout(); resetHighlightTimeout();
if (limitSetter === Setter.UPPER) { if (limitSetter === Setter.UPPER) {
upperLimit--; upperLimit--;
renderUpperLimit(); renderUpperLimit();
console.log("Upper limit: " + upperLimit);
upperLimitChanged = true; upperLimitChanged = true;
} else if(limitSetter === Setter.LOWER) { } else if(limitSetter === Setter.LOWER) {
lowerLimit--; lowerLimit--;
renderLowerLimit(); renderLowerLimit();
console.log("Lower limit: " + lowerLimit);
lowerLimitChanged = true; lowerLimitChanged = true;
} }
} }
function resetHighlightTimeout() { function resetHighlightTimeout() {
if (setterHighlightTimeout) { if (setterHighlightTimeout) {
clearTimeout(setterHighlightTimeout); clearTimeout(setterHighlightTimeout);
} }
setterHighlightTimeout = setTimeout(setLimitSetterToNone, 2000); setterHighlightTimeout = setTimeout(setLimitSetterToNone, 2000);
} }
// Show launcher when middle button pressed // Show launcher when middle button pressed
function switchOffApp(){ function switchOffApp(){
Bangle.setHRMPower(0); Bangle.setHRMPower(0);
Bangle.showLauncher(); Bangle.showLauncher();
} }
// special function to handle display switch on // special function to handle display switch on
Bangle.on('lcdPower', (on) => { Bangle.on('lcdPower', (on) => {
g.clear(); g.clear();
if (on) { if (on) {
Bangle.drawWidgets(); Bangle.drawWidgets();
renderButtonIcons();
// call your app function here renderHomeIcon();
renderLowerLimitBackground(); renderLowerLimitBackground();
renderUpperLimitBackground(); renderUpperLimitBackground();
lowerLimitChanged = true; lowerLimitChanged = true;
@ -302,10 +307,10 @@ Bangle.on('lcdPower', (on) => {
drawTrainingHeartRate(); drawTrainingHeartRate();
} }
}); });
Bangle.setHRMPower(1); Bangle.setHRMPower(1);
Bangle.on('HRM', onHrm); Bangle.on('HRM', onHrm);
setWatch(incrementLimit, BTN1, {edge:"rising", debounce:50, repeat:true}); setWatch(incrementLimit, BTN1, {edge:"rising", debounce:50, repeat:true});
setWatch(switchOffApp, BTN2, {edge:"rising", debounce:50, repeat:true}); setWatch(switchOffApp, BTN2, {edge:"rising", debounce:50, repeat:true});
setWatch(decrementLimit, BTN3, {edge:"rising", debounce:50, repeat:true}); setWatch(decrementLimit, BTN3, {edge:"rising", debounce:50, repeat:true});
@ -317,7 +322,7 @@ Bangle.loadWidgets();
Bangle.drawWidgets(); Bangle.drawWidgets();
//drawTrainingHeartRate(); //drawTrainingHeartRate();
renderButtonIcons(); renderHomeIcon();
renderLowerLimitBackground(); renderLowerLimitBackground();
renderUpperLimitBackground(); renderUpperLimitBackground();