add support for Bangle.js 2

master
bengwalker 2021-11-17 20:46:18 +01:00
parent 5fc5b83102
commit 071a7a7e68
3 changed files with 48 additions and 28 deletions

View File

@ -1553,7 +1553,7 @@
"id": "metronome", "id": "metronome",
"name": "Metronome", "name": "Metronome",
"icon": "metronome_icon.png", "icon": "metronome_icon.png",
"version": "0.06", "version": "0.07",
"readme": "README.md", "readme": "README.md",
"description": "Makes the watch blinking and vibrating with a given rate", "description": "Makes the watch blinking and vibrating with a given rate",
"tags": "tool", "tags": "tool",

View File

@ -4,3 +4,4 @@
0.04: App shows instructions, Widgets remain visible, color changed 0.04: App shows instructions, Widgets remain visible, color changed
0.05: Buzz intensity and beats per bar can be changed via settings-app 0.05: Buzz intensity and beats per bar can be changed via settings-app
0.06: Correct string position 0.06: Correct string position
0.07: Add support for Bangle.sjs2

View File

@ -5,7 +5,7 @@ var time_diffs = [1000, 1000, 1000]; //array to calculate mean bpm
var tindex=0; //index to iterate through time_diffs var tindex=0; //index to iterate through time_diffs
Bangle.setLCDTimeout(undefined); //do not deaktivate display while running this app Bangle.setLCDTimeout(undefined); //do not deactivate display while running this app
const storage = require("Storage"); const storage = require("Storage");
const SETTINGS_FILE = 'metronome.settings.json'; const SETTINGS_FILE = 'metronome.settings.json';
@ -15,7 +15,7 @@ function setting(key) {
//define default settings //define default settings
const DEFAULTS = { const DEFAULTS = {
'beatsperbar': 4, 'beatsperbar': 4,
'buzzintens': 0.75, 'buzzintens': 1.0,
}; };
if (!settings) { loadSettings(); } if (!settings) { loadSettings(); }
return (key in settings) ? settings[key] : DEFAULTS[key]; return (key in settings) ? settings[key] : DEFAULTS[key];
@ -54,14 +54,16 @@ function updateScreen() {
changecolor(); changecolor();
try { try {
Bangle.buzz(50, setting('buzzintens')); Bangle.buzz(50, setting('buzzintens'));
Bangle.beep(); // TODO: make optional
} catch(err) { } catch(err) {
} }
g.setFont("Vector",40).setFontAlign(0,0); g.setFont("Vector",40).setFontAlign(0,0);
g.drawString(Math.floor(bpm)+"bpm", g.getWidth()/2, 100); g.drawString(Math.floor(bpm)+"bpm", g.getWidth()/2, 100);
} }
Bangle.on('touch', function(button) { Bangle.on('touch', function(zone, e) {
// setting bpm by tapping the screen. Uses the mean time difference between several tappings. // setting bpm by tapping the screen. Uses the mean time difference between several tappings.
if ((process.env.HWVERSION==2 && e.x > 39 && e.x < 136) || process.env.HWVERSION==1){
if (tindex < time_diffs.length) { if (tindex < time_diffs.length) {
if (Date.now()-tStart < 5000) { if (Date.now()-tStart < 5000) {
time_diffs[tindex] = Date.now()-tStart; time_diffs[tindex] = Date.now()-tStart;
@ -72,7 +74,7 @@ Bangle.on('touch', function(button) {
} }
tindex += 1; tindex += 1;
mean_time = 0.0; mean_time = 0.0;
for(count = 0; count < time_diffs.length; count++) { for (count = 0; count < time_diffs.length; count++) {
mean_time += time_diffs[count]; mean_time += time_diffs[count];
} }
time_diff = mean_time/count; time_diff = mean_time/count;
@ -84,9 +86,25 @@ Bangle.on('touch', function(button) {
clearInterval(interval); clearInterval(interval);
interval = setInterval(updateScreen, 60000 / bpm); interval = setInterval(updateScreen, 60000 / bpm);
return bpm; return bpm;
}
else if (e.x < 39) {
if (bpm > 1) {
bpm -= 1;
clearInterval(interval);
interval = setInterval(updateScreen, 60000 / bpm);
}
}
else if (e.x > 136) {
if (bpm > 1) {
bpm += 1;
clearInterval(interval);
interval = setInterval(updateScreen, 60000 / bpm);
}}
}); });
// enable bpm finetuning via buttons. // enable bpm finetuning via
if ((process.env.HWVERSION==1)) {
setWatch(() => { setWatch(() => {
bpm += 1; bpm += 1;
clearInterval(interval); clearInterval(interval);
@ -101,10 +119,11 @@ setWatch(() => {
} }
}, BTN3, {repeat:true}); }, BTN3, {repeat:true});
}
interval = setInterval(updateScreen, 60000 / bpm); interval = setInterval(updateScreen, 60000 / bpm);
g.clear(1).setFont("6x8"); g.clear(1).setFont("6x8");
g.drawString('Touch the screen to set tempo.\nUse BTN1 to increase, and\nBTN3 to decrease bpm value by 1.', 25, 200); g.drawString('Touch the screen to set tempo.\nUse BTN1 to increase, and\nBTN3 to decrease bpm value by 1.', 25, 200);
Bangle.loadWidgets(); Bangle.loadWidgets();
Bangle.drawWidgets(); Bangle.drawWidgets();