mirror of https://github.com/espruino/BangleApps
Delete apps/speedclock directory
parent
cfbef5ae35
commit
3ff6691286
|
@ -1 +0,0 @@
|
||||||
0.01: Created app
|
|
|
@ -1,21 +0,0 @@
|
||||||
# Morphing Clock Plus
|
|
||||||
|
|
||||||
Based on Morphing Clock with more readable seconds and date, and an additional simple stopwatch.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
In addition to the Morphing Clock, a simple stopwatch can be started in the lower part of the display.
|
|
||||||
|
|
||||||
BTN3 starts and stops the stopwatch.
|
|
||||||
|
|
||||||
BTN1 resets/clears the stopwatch.
|
|
||||||
|
|
||||||
## Requests
|
|
||||||
|
|
||||||
Please leave bug reports and requests by raising an issue [here](https://github.com/skauertz/BangleApps).
|
|
||||||
|
|
||||||
## Creator
|
|
||||||
|
|
||||||
Sebastian Kauertz https://github.com/skauertz
|
|
|
@ -1 +0,0 @@
|
||||||
require("heatshrink").decompress(atob("oFAwhC/ABOIABgfymYAKD+Z/9hGDL5c4wAf/XzjASTxqgQhAfPMB2IPxiACIBo+BDxqACIBg+CLxpANHwQPBABgvCIBT8CJ5owDD5iPOOAQfLBojiDCYQGFGIQfICIQfdBYJNMOI6SHD8jeNOIYzID8hfRD9LfEAoTdFBIifLAAIffBoQRBAJpxMD84JCD+S/GL56fID8ALBb6ZhID8qtJCZ4fgT4YDBABq/PD7RNEL6IRKD8WID5pfCD5kzNhKSFmYfMBwSeOGBoPDABgvCJ5wAON5pADABivPIAIAOd5xABABweOD4J+OD58IQBj8LD/6gUDyAfhXzgfiP/wA2"))
|
|
|
@ -1,187 +0,0 @@
|
||||||
/*
|
|
||||||
Simple watch [speedwatch]
|
|
||||||
Mike Bennett mike[at]kereru.com
|
|
||||||
0.01 : Initial
|
|
||||||
*/
|
|
||||||
|
|
||||||
var v='0.01';
|
|
||||||
|
|
||||||
// timeout used to update every minute
|
|
||||||
var drawTimeout;
|
|
||||||
var x,y,w,h;
|
|
||||||
|
|
||||||
// Variables for the stopwatch
|
|
||||||
var counter = -1; // Counts seconds
|
|
||||||
var oldDate = new Date(2020,0,1); // Initialize to a past date
|
|
||||||
var swInterval; // The interval's id
|
|
||||||
var B3 = 0; // Flag to track BTN3's current function
|
|
||||||
var w1; // watch id for BTN1
|
|
||||||
var w3; // watch id for BTN3
|
|
||||||
|
|
||||||
// Colours
|
|
||||||
var colTime = 0x4FE0;
|
|
||||||
var colDate = 0xEFE0;
|
|
||||||
var colSW = 0x1DFD;
|
|
||||||
|
|
||||||
// schedule a draw for the next minute
|
|
||||||
function queueDraw() {
|
|
||||||
if (drawTimeout) clearTimeout(drawTimeout);
|
|
||||||
drawTimeout = setTimeout(function() {
|
|
||||||
drawTimeout = undefined;
|
|
||||||
draw();
|
|
||||||
}, 60000 - (Date.now() % 60000));
|
|
||||||
}
|
|
||||||
|
|
||||||
function stopWatch(clear) {
|
|
||||||
|
|
||||||
x = 120;
|
|
||||||
y = 200;
|
|
||||||
w = 240;
|
|
||||||
h = 25;
|
|
||||||
|
|
||||||
g.reset();
|
|
||||||
g.setColor(colSW);
|
|
||||||
g.clearRect(x-(w/2),y-h,x+(w/2),y); // clear the background
|
|
||||||
if (clear) return;
|
|
||||||
|
|
||||||
counter++;
|
|
||||||
|
|
||||||
var hrs = Math.floor(counter/3600);
|
|
||||||
var mins = Math.floor((counter-hrs*3600)/60);
|
|
||||||
var secs = counter - mins*60 - hrs*3600;
|
|
||||||
|
|
||||||
// When starting the stopwatch:
|
|
||||||
if (B3) {
|
|
||||||
// Set BTN3 to stop the stopwatch and bind itself to restart it:
|
|
||||||
w3=setWatch(() => {clearInterval(swInterval);
|
|
||||||
swInterval=undefined;
|
|
||||||
if (w3) {clearWatch(w3);w3=undefined;}
|
|
||||||
setWatch(() => {swInterval=setInterval(stopWatch, 1000);stopWatch();},
|
|
||||||
BTN3, {repeat:false,edge:"falling"});
|
|
||||||
B3 = 1;},
|
|
||||||
BTN3, {repeat:false,edge:"falling"});
|
|
||||||
B3 = 0; // BTN3 is bound to stop the stopwatch
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bind BTN1 to call the reset function:
|
|
||||||
if (!w1) w1 = setWatch(resetStopWatch, BTN1, {repeat:false,edge:"falling"});
|
|
||||||
|
|
||||||
// Draw elapsed time:
|
|
||||||
g.setFontAlign(0,1);
|
|
||||||
g.setFont("Vector24");
|
|
||||||
|
|
||||||
var swStr = ("0"+parseInt(mins)).substr(-2) + ':' + ("0"+parseInt(secs)).substr(-2);
|
|
||||||
|
|
||||||
if (hrs>0) swStr = ("0"+parseInt(hrs)).substr(-2) + ':' + swStr;
|
|
||||||
|
|
||||||
g.drawString(swStr, x, y, true);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
function resetStopWatch() {
|
|
||||||
|
|
||||||
// Stop the interval if necessary:
|
|
||||||
if (swInterval) {
|
|
||||||
clearInterval(swInterval);
|
|
||||||
swInterval=undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clear the stopwatch:
|
|
||||||
stopWatch(true);
|
|
||||||
|
|
||||||
// Restore the date
|
|
||||||
drawDate();
|
|
||||||
|
|
||||||
// Reset the counter:
|
|
||||||
counter = -1;
|
|
||||||
|
|
||||||
// Set BTN3 to start the stopwatch again:
|
|
||||||
if (!B3) {
|
|
||||||
// In case the stopwatch is reset while still running, the watch on BTN3 is still active, so we need to reset it manually:
|
|
||||||
if (w3) {clearWatch(w3);w3=undefined;}
|
|
||||||
// Set BTN3 to start the watch again:
|
|
||||||
setWatch(() => {swInterval=setInterval(stopWatch, 1000);stopWatch();}, BTN3, {repeat:false,edge:"falling"});
|
|
||||||
B3 = 1; // BTN3 is bound to start the stopwatch
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reset watch on BTN1:
|
|
||||||
if (w1) {clearWatch(w1);w1=undefined;}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function drawDate() {
|
|
||||||
// draw date
|
|
||||||
x = 120;
|
|
||||||
y = 200;
|
|
||||||
w = 240;
|
|
||||||
h = 25;
|
|
||||||
|
|
||||||
g.reset();
|
|
||||||
g.setColor(colDate);
|
|
||||||
g.clearRect(x-(w/2),y-h,x+(w/2),y); // clear the background
|
|
||||||
|
|
||||||
var date = new Date();
|
|
||||||
// var dateStr = require("locale").date(date,1);
|
|
||||||
var dateStr = date.getDate() + ' ' +require("locale").month(date,1);
|
|
||||||
g.setFontAlign(0,1);
|
|
||||||
g.setFont("Vector24");
|
|
||||||
g.drawString(dateStr,x,y);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function drawTime() {
|
|
||||||
x = 120;
|
|
||||||
y = 107;
|
|
||||||
w = 120;
|
|
||||||
h = 134;
|
|
||||||
|
|
||||||
var date = new Date();
|
|
||||||
var timeStr = require("locale").time(date,1);
|
|
||||||
g.reset();
|
|
||||||
g.clearRect(x-(w/2),y-(h/2),x+(w/2),y+(h/2)); // clear the background
|
|
||||||
g.setFontAlign(0,0);
|
|
||||||
g.setFontVector(85);
|
|
||||||
g.setColor(colTime);
|
|
||||||
g.drawString(timeStr.substring(0,2),x,y-30);
|
|
||||||
g.drawString(timeStr.substring(3,5),x,y+38);
|
|
||||||
}
|
|
||||||
|
|
||||||
function draw() {
|
|
||||||
x = g.getWidth()/2;
|
|
||||||
y = g.getHeight()/2;
|
|
||||||
g.reset();
|
|
||||||
|
|
||||||
drawTime();
|
|
||||||
if ( counter < 0 ) drawDate(); // Only draw date when SW is not running.
|
|
||||||
|
|
||||||
// queue draw in one minute
|
|
||||||
queueDraw();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clear the screen once, at startup
|
|
||||||
g.clear();
|
|
||||||
|
|
||||||
// draw immediately at first, queue update
|
|
||||||
draw();
|
|
||||||
|
|
||||||
// Stop updates when LCD is off, restart when on
|
|
||||||
Bangle.on('lcdPower',on=>{
|
|
||||||
if (on) {
|
|
||||||
draw(); // draw immediately, queue redraw
|
|
||||||
} else { // stop draw timer
|
|
||||||
if (drawTimeout) clearTimeout(drawTimeout);
|
|
||||||
drawTimeout = undefined;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Show launcher when middle button pressed
|
|
||||||
Bangle.setUI("clock");
|
|
||||||
|
|
||||||
// Start stopwatch when BTN3 is pressed
|
|
||||||
setWatch(() => {swInterval=setInterval(stopWatch, 1000);stopWatch();}, BTN3, {repeat:false,edge:"falling"});
|
|
||||||
B3 = 1; // BTN3 is bound to start the stopwatch
|
|
||||||
|
|
||||||
// Load widgets
|
|
||||||
Bangle.loadWidgets();
|
|
||||||
Bangle.drawWidgets();
|
|
Binary file not shown.
Before Width: | Height: | Size: 1.4 KiB |
Loading…
Reference in New Issue