Fix remove unnecessary file and trim down App name
parent
4a81104def
commit
0bfdb86fcb
|
|
@ -814,7 +814,7 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{ "id": "wohrm",
|
{ "id": "wohrm",
|
||||||
"name": "Workout Heart Rate Monitor",
|
"name": "Workout HRM",
|
||||||
"icon": "app.png",
|
"icon": "app.png",
|
||||||
"version":"0.03",
|
"version":"0.03",
|
||||||
"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.",
|
||||||
|
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
/node_modules
|
|
||||||
/.eslintrc.js
|
|
||||||
/package.json
|
|
||||||
/package-lock.json
|
|
||||||
|
|
@ -1,160 +1,160 @@
|
||||||
/* 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 = 50;
|
// const shortBuzzTimeInMs = 50;
|
||||||
const longBuzzTimeInMs = 200;
|
// const longBuzzTimeInMs = 200;
|
||||||
|
|
||||||
let upperLimit = 90;
|
// let upperLimit = 90;
|
||||||
let upperLimitChanged = true;
|
// let upperLimitChanged = true;
|
||||||
|
|
||||||
let lowerLimit = 50;
|
// let lowerLimit = 50;
|
||||||
let lowerLimitChanged = true;
|
// let lowerLimitChanged = true;
|
||||||
|
|
||||||
let limitSetter = Setter.NONE;
|
// let limitSetter = Setter.NONE;
|
||||||
|
|
||||||
let currentHeartRate = 0;
|
// let currentHeartRate = 0;
|
||||||
let hrConfidence = -1;
|
// let hrConfidence = -1;
|
||||||
let hrOrConfidenceChanged = true;
|
// let hrOrConfidenceChanged = true;
|
||||||
|
|
||||||
|
|
||||||
let setterHighlightTimeout;
|
// let setterHighlightTimeout;
|
||||||
|
|
||||||
function renderUpperLimitBackground() {
|
// function renderUpperLimitBackground() {
|
||||||
g.setColor(1,0,0);
|
// g.setColor(1,0,0);
|
||||||
g.fillRect(125,40, 210, 70);
|
// g.fillRect(125,40, 210, 70);
|
||||||
g.fillRect(180,70, 210, 200);
|
// g.fillRect(180,70, 210, 200);
|
||||||
|
|
||||||
//Round top left corner
|
// //Round top left corner
|
||||||
g.fillEllipse(115,40,135,70);
|
// g.fillEllipse(115,40,135,70);
|
||||||
|
|
||||||
//Round top right corner
|
// //Round top right corner
|
||||||
g.setColor(0,0,0);
|
// g.setColor(0,0,0);
|
||||||
g.fillRect(205,40, 210, 45);
|
// g.fillRect(205,40, 210, 45);
|
||||||
g.setColor(1,0,0);
|
// g.setColor(1,0,0);
|
||||||
g.fillEllipse(190,40,210,50);
|
// g.fillEllipse(190,40,210,50);
|
||||||
|
|
||||||
//Round inner corner
|
// //Round inner corner
|
||||||
g.fillRect(174,71, 179, 76);
|
// g.fillRect(174,71, 179, 76);
|
||||||
g.setColor(0,0,0);
|
// g.setColor(0,0,0);
|
||||||
g.fillEllipse(160,71,179,82);
|
// g.fillEllipse(160,71,179,82);
|
||||||
|
|
||||||
//Round bottom
|
// //Round bottom
|
||||||
g.setColor(1,0,0);
|
// g.setColor(1,0,0);
|
||||||
g.fillEllipse(180,190, 210, 210);
|
// g.fillEllipse(180,190, 210, 210);
|
||||||
}
|
// }
|
||||||
|
|
||||||
function renderLowerLimitBackground() {
|
// function renderLowerLimitBackground() {
|
||||||
g.setColor(0,0,1);
|
// g.setColor(0,0,1);
|
||||||
g.fillRect(10, 180, 100, 210);
|
// g.fillRect(10, 180, 100, 210);
|
||||||
g.fillRect(10, 50, 40, 180);
|
// g.fillRect(10, 50, 40, 180);
|
||||||
|
|
||||||
//Rounded top
|
// //Rounded top
|
||||||
g.setColor(0,0,1);
|
// g.setColor(0,0,1);
|
||||||
g.fillEllipse(10,40, 40, 60);
|
// g.fillEllipse(10,40, 40, 60);
|
||||||
|
|
||||||
//Round bottom right corner
|
// //Round bottom right corner
|
||||||
g.setColor(0,0,1);
|
// g.setColor(0,0,1);
|
||||||
g.fillEllipse(90,180,110,210);
|
// g.fillEllipse(90,180,110,210);
|
||||||
|
|
||||||
//Round inner corner
|
// //Round inner corner
|
||||||
g.setColor(0,0,1);
|
// g.setColor(0,0,1);
|
||||||
g.fillRect(40,175,45,180);
|
// g.fillRect(40,175,45,180);
|
||||||
g.setColor(0,0,0);
|
// g.setColor(0,0,0);
|
||||||
g.fillEllipse(41,170,60,179);
|
// g.fillEllipse(41,170,60,179);
|
||||||
|
|
||||||
//Round bottom left corner
|
// //Round bottom left corner
|
||||||
g.setColor(0,0,0);
|
// g.setColor(0,0,0);
|
||||||
g.fillRect(10,205, 15, 210);
|
// g.fillRect(10,205, 15, 210);
|
||||||
g.setColor(0,0,1);
|
// g.setColor(0,0,1);
|
||||||
g.fillEllipse(10,200,30,210);
|
// g.fillEllipse(10,200,30,210);
|
||||||
}
|
// }
|
||||||
|
|
||||||
function drawTrainingHeartRate() {
|
// function drawTrainingHeartRate() {
|
||||||
//Only redraw if the display is on
|
// //Only redraw if the display is on
|
||||||
if (Bangle.isLCDOn()) {
|
// if (Bangle.isLCDOn()) {
|
||||||
renderButtonIcons();
|
// renderButtonIcons();
|
||||||
|
|
||||||
renderUpperLimit();
|
// renderUpperLimit();
|
||||||
|
|
||||||
renderCurrentHeartRate();
|
// renderCurrentHeartRate();
|
||||||
|
|
||||||
renderLowerLimit();
|
// renderLowerLimit();
|
||||||
|
|
||||||
renderConfidenceBars();
|
// renderConfidenceBars();
|
||||||
}
|
// }
|
||||||
|
|
||||||
//buzz();
|
// //buzz();
|
||||||
}
|
// }
|
||||||
|
|
||||||
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, 130,50);
|
||||||
|
|
||||||
upperLimitChanged = false;
|
// upperLimitChanged = false;
|
||||||
}
|
// }
|
||||||
|
|
||||||
function renderCurrentHeartRate() {
|
// function renderCurrentHeartRate() {
|
||||||
if(!hrOrConfidenceChanged) { return; }
|
// if(!hrOrConfidenceChanged) { return; }
|
||||||
|
|
||||||
g.setColor(255,255,255);
|
// g.setColor(255,255,255);
|
||||||
g.fillRect(45, 110, 165, 150);
|
// g.fillRect(45, 110, 165, 150);
|
||||||
|
|
||||||
g.setColor(0,0,0);
|
// g.setColor(0,0,0);
|
||||||
g.setFontVector(24);
|
// g.setFontVector(24);
|
||||||
g.setFontAlign(1, -1, 0);
|
// g.setFontAlign(1, -1, 0);
|
||||||
g.drawString(currentHeartRate, 130, 117);
|
// g.drawString(currentHeartRate, 130, 117);
|
||||||
|
|
||||||
//Reset alignment to defaults
|
// //Reset alignment to defaults
|
||||||
g.setFontAlign(-1, -1, 0);
|
// g.setFontAlign(-1, -1, 0);
|
||||||
}
|
// }
|
||||||
|
|
||||||
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(!hrOrConfidenceChanged) { return; }
|
// if(!hrOrConfidenceChanged) { 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) {
|
||||||
g.setColor(255, 255, 0);
|
// g.setColor(255, 255, 0);
|
||||||
} else if(hrConfidence >= 0){
|
// } else if(hrConfidence >= 0){
|
||||||
g.setColor(255, 0, 0);
|
// g.setColor(255, 0, 0);
|
||||||
} else {
|
// } else {
|
||||||
g.setColor(255, 255, 255);
|
// g.setColor(255, 255, 255);
|
||||||
}
|
// }
|
||||||
|
|
||||||
g.fillRect(45, 110, 55, 150);
|
// g.fillRect(45, 110, 55, 150);
|
||||||
g.fillRect(165, 110, 175, 150);
|
// g.fillRect(165, 110, 175, 150);
|
||||||
}
|
// }
|
||||||
|
|
||||||
function renderButtonIcons() {
|
function renderButtonIcons() {
|
||||||
g.setColor(255,255,255);
|
g.setColor(255,255,255);
|
||||||
|
|
@ -174,140 +174,142 @@ function renderButtonIcons() {
|
||||||
g.drawString("-", 222,165);
|
g.drawString("-", 222,165);
|
||||||
}
|
}
|
||||||
|
|
||||||
function buzz()
|
// function buzz()
|
||||||
{
|
// {
|
||||||
if(currentHeartRate > upperLimit)
|
// if(currentHeartRate > upperLimit)
|
||||||
{
|
// {
|
||||||
Bangle.buzz(shortBuzzTimeInMs);
|
// Bangle.buzz(shortBuzzTimeInMs);
|
||||||
setTimeout(() => { Bangle.buzz(shortBuzzTimeInMs); }, shortBuzzTimeInMs);
|
// setTimeout(() => { Bangle.buzz(shortBuzzTimeInMs); }, shortBuzzTimeInMs);
|
||||||
setTimeout(() => { Bangle.buzz(shortBuzzTimeInMs); }, shortBuzzTimeInMs);
|
// setTimeout(() => { Bangle.buzz(shortBuzzTimeInMs); }, shortBuzzTimeInMs);
|
||||||
}
|
// }
|
||||||
|
|
||||||
if(currentHeartRate < lowerLimit)
|
// if(currentHeartRate < lowerLimit)
|
||||||
{
|
// {
|
||||||
Bangle.buzz(longBuzzTimeInMs);
|
// Bangle.buzz(longBuzzTimeInMs);
|
||||||
setTimeout(() => { Bangle.buzz(longBuzzTimeInMs); }, longBuzzTimeInMs);
|
// setTimeout(() => { Bangle.buzz(longBuzzTimeInMs); }, longBuzzTimeInMs);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
function onHrm(hrm){
|
// function onHrm(hrm){
|
||||||
hrOrConfidenceChanged = (currentHeartRate !== hrm.bpm || hrConfidence !== hrm.confidence);
|
// hrOrConfidenceChanged = (currentHeartRate !== hrm.bpm || hrConfidence !== hrm.confidence);
|
||||||
currentHeartRate = hrm.bpm;
|
// currentHeartRate = hrm.bpm;
|
||||||
hrConfidence = hrm.confidence;
|
// hrConfidence = hrm.confidence;
|
||||||
}
|
// }
|
||||||
|
|
||||||
function setLimitSetterToLower() {
|
// function setLimitSetterToLower() {
|
||||||
resetHighlightTimeout();
|
// resetHighlightTimeout();
|
||||||
|
|
||||||
limitSetter = Setter.LOWER;
|
// limitSetter = Setter.LOWER;
|
||||||
console.log("Limit setter is lower");
|
// console.log("Limit setter is lower");
|
||||||
|
|
||||||
upperLimitChanged = true;
|
// upperLimitChanged = true;
|
||||||
lowerLimitChanged = true;
|
// lowerLimitChanged = true;
|
||||||
|
|
||||||
renderUpperLimit();
|
// renderUpperLimit();
|
||||||
renderLowerLimit();
|
// renderLowerLimit();
|
||||||
}
|
// }
|
||||||
|
|
||||||
function setLimitSetterToUpper() {
|
// function setLimitSetterToUpper() {
|
||||||
resetHighlightTimeout();
|
// resetHighlightTimeout();
|
||||||
|
|
||||||
limitSetter = Setter.UPPER;
|
// limitSetter = Setter.UPPER;
|
||||||
console.log("Limit setter is upper");
|
// console.log("Limit setter is upper");
|
||||||
|
|
||||||
upperLimitChanged = true;
|
// upperLimitChanged = true;
|
||||||
lowerLimitChanged = true;
|
// lowerLimitChanged = true;
|
||||||
|
|
||||||
renderLowerLimit();
|
// renderLowerLimit();
|
||||||
renderUpperLimit();
|
// renderUpperLimit();
|
||||||
}
|
// }
|
||||||
|
|
||||||
function setLimitSetterToNone() {
|
// function setLimitSetterToNone() {
|
||||||
limitSetter = Setter.NONE;
|
// limitSetter = Setter.NONE;
|
||||||
console.log("Limit setter is none");
|
// console.log("Limit setter is none");
|
||||||
|
|
||||||
upperLimitChanged = true;
|
// upperLimitChanged = true;
|
||||||
lowerLimitChanged = true;
|
// lowerLimitChanged = true;
|
||||||
|
|
||||||
renderLowerLimit();
|
// renderLowerLimit();
|
||||||
renderUpperLimit();
|
// renderUpperLimit();
|
||||||
}
|
// }
|
||||||
|
|
||||||
function incrementLimit(){
|
// function incrementLimit(){
|
||||||
resetHighlightTimeout();
|
// resetHighlightTimeout();
|
||||||
|
|
||||||
if (limitSetter === Setter.UPPER) {
|
// if (limitSetter === Setter.UPPER) {
|
||||||
upperLimit++;
|
// upperLimit++;
|
||||||
renderUpperLimit();
|
// renderUpperLimit();
|
||||||
console.log("Upper limit: " + upperLimit);
|
// 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);
|
// 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);
|
// 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);
|
// 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();
|
||||||
// call your app function here
|
// // call your app function here
|
||||||
renderLowerLimitBackground();
|
// renderLowerLimitBackground();
|
||||||
renderUpperLimitBackground();
|
// renderUpperLimitBackground();
|
||||||
lowerLimitChanged = true;
|
// lowerLimitChanged = true;
|
||||||
upperLimitChanged = true;
|
// upperLimitChanged = true;
|
||||||
drawTrainingHeartRate();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Bangle.setHRMPower(1);
|
|
||||||
Bangle.on('HRM', onHrm);
|
|
||||||
|
|
||||||
setWatch(incrementLimit, BTN1, {edge:"rising", debounce:50, repeat:true});
|
|
||||||
setWatch(switchOffApp, BTN2, {repeat:false,edge:"falling"});
|
|
||||||
setWatch(decrementLimit, BTN3, {edge:"rising", debounce:50, repeat:true});
|
|
||||||
setWatch(setLimitSetterToLower, BTN4, {edge:"rising", debounce:50, repeat:true});
|
|
||||||
setWatch(setLimitSetterToUpper, BTN5, { edge: "rising", debounce: 50, repeat: true });
|
|
||||||
|
|
||||||
g.clear();
|
|
||||||
Bangle.loadWidgets();
|
|
||||||
Bangle.drawWidgets();
|
|
||||||
// drawTrainingHeartRate();
|
// drawTrainingHeartRate();
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
|
||||||
// refesh every sec
|
// Bangle.setHRMPower(1);
|
||||||
renderLowerLimitBackground();
|
// Bangle.on('HRM', onHrm);
|
||||||
renderUpperLimitBackground();
|
|
||||||
setInterval(drawTrainingHeartRate, 1000);
|
// setWatch(incrementLimit, BTN1, {edge:"rising", debounce:50, repeat:true});
|
||||||
|
setWatch(switchOffApp, BTN2, {repeat:false,edge:"falling"});
|
||||||
|
|
||||||
|
renderButtonIcons
|
||||||
|
// setWatch(decrementLimit, BTN3, {edge:"rising", debounce:50, repeat:true});
|
||||||
|
// setWatch(setLimitSetterToLower, BTN4, {edge:"rising", debounce:50, repeat:true});
|
||||||
|
// setWatch(setLimitSetterToUpper, BTN5, { edge: "rising", debounce: 50, repeat: true });
|
||||||
|
|
||||||
|
// g.clear();
|
||||||
|
// Bangle.loadWidgets();
|
||||||
|
// Bangle.drawWidgets();
|
||||||
|
// //drawTrainingHeartRate();
|
||||||
|
|
||||||
|
// // refesh every sec
|
||||||
|
// renderLowerLimitBackground();
|
||||||
|
// renderUpperLimitBackground();
|
||||||
|
// setInterval(drawTrainingHeartRate, 1000);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue