diff --git a/apps.json b/apps.json index 4e497f635..a6f83749d 100644 --- a/apps.json +++ b/apps.json @@ -2962,7 +2962,7 @@ { "id": "stepo", "name": "Stepometer Clock", "icon": "stepo.png", - "version":"0.01", + "version":"0.02", "description": "A large font watch, displays step count in a doughnut guage and warns of low battery", "tags": "clock", "type":"clock", diff --git a/apps/stepo/ChangeLog b/apps/stepo/ChangeLog new file mode 100644 index 000000000..c94954969 --- /dev/null +++ b/apps/stepo/ChangeLog @@ -0,0 +1,2 @@ +0.01: First version +0.02: Speeded up draw, start stop timer, long press BTN2 to switch to the launcher diff --git a/apps/stepo/README.md b/apps/stepo/README.md index 86f462ca2..26531c121 100644 --- a/apps/stepo/README.md +++ b/apps/stepo/README.md @@ -10,6 +10,7 @@ A large font watch, displays step count in a doughnut guage and warns of low bat - The guage show percentage of steps out of a goal of 10000 steps + ![](screenshot1.jpg) - When the battery is less than 25% the doughnut turns red @@ -17,8 +18,14 @@ A large font watch, displays step count in a doughnut guage and warns of low bat ![](screenshot2.jpg) -# Notes +## BTN2 Long press to start the launcher +BTN2 is confiured to respond to a 1.5 second press in order to switch +to the launcher App. Simply press and hold until you hear a buzz and +release. This avoids accidently switching out of the watch app when +clothing catches it. + +## Notes * Uses an arrayBuffer to prepare the doughnut guage. The arrayBuffer is 160*160 and is larger than required. The reason for this is that diff --git a/apps/stepo/app.js b/apps/stepo/app.js index 640355d98..e3f7092f1 100644 --- a/apps/stepo/app.js +++ b/apps/stepo/app.js @@ -1,6 +1,7 @@ var pal4color = new Uint16Array([0x0000,0xFFFF,0x7BEF,0xAFE5],0,2); // b,w,grey,greenyellow var pal4red = new Uint16Array([0x0000,0xFFFF,0xF800,0xAFE5],0,2); // b,w,red,greenyellow var buf = Graphics.createArrayBuffer(160,160,2,{msb:true}); +var intervalRefSec; function flip(x,y) { g.drawImage({width:160,height:160,bpp:2,buffer:buf.buffer, palette:pal4color}, x, y); @@ -33,7 +34,7 @@ function drawSteps() { buf.setColor(3); // green-yellow // draw guauge - for (i = startrot; i > midrot; i--) { + for (i = startrot; i > midrot; i -= 4) { x = cx + r * Math.sin(radians(i)); y = cy + r * Math.cos(radians(i)); buf.fillCircle(x,y,4); @@ -42,7 +43,7 @@ function drawSteps() { buf.setColor(2); // grey // draw remainder of guage in grey - for (i = midrot; i > endrot; i--) { + for (i = midrot; i > endrot; i -= 4) { x = cx + r * Math.sin(radians(i)); y = cy + r * Math.cos(radians(i)); buf.fillCircle(x,y,4); @@ -80,6 +81,15 @@ function getSteps() { return stepsWidget().getSteps(); return "-"; } + +function startTimer() { + draw(); + intervalRefSec = setInterval(draw, 15000); +} + +function stopTimer() { + if(intervalRefSec) { intervalRefSec = clearInterval(intervalRefSec); } +} function stepsWidget() { if (WIDGETS.activepedom !== undefined) { @@ -92,13 +102,46 @@ function stepsWidget() { // handle switch display on by pressing BTN1 Bangle.on('lcdPower', function(on) { - if (on) draw(); + if (on) + startTimer(); + else + stopTimer(); }); +let firstPress = 0; +var pressTimer; + +// start a timer and buzz whenn held long enough +function firstPressed() { + firstPress = getTime(); + pressTimer = setInterval(longPressCheck, 1500); +} + +// if you release too soon there is no buzz as timer is cleared +function thenReleased() { + var dur = getTime() - firstPress; + if (pressTimer) { + clearInterval(pressTimer); + pressTimer = undefined; + } + if ( dur >= 1.5 ) Bangle.showLauncher(); +} + +// when you feel the buzzer you know you have done a long press +function longPressCheck() { + Bangle.buzz(); + if (pressTimer) { + clearInterval(pressTimer); + pressTimer = undefined; + } +} + +// make BTN require a long press (1.5 seconds) to switch to launcher +setWatch(firstPressed, BTN2,{repeat:true,edge:"rising"}); +setWatch(thenReleased, BTN2,{repeat:true,edge:"falling"}); + g.reset(); g.clear(); Bangle.loadWidgets(); Bangle.drawWidgets(); -setInterval(draw, 15000); // refresh every 15s -draw(); -setWatch(Bangle.showLauncher, BTN2, {repeat:false,edge:"falling"}); +startTimer();