From 1314d2ec86c9a89ffbbad33c63fa1d5c5e3f460c Mon Sep 17 00:00:00 2001 From: sebi5361 Date: Mon, 2 Dec 2019 17:01:14 +0100 Subject: [PATCH] Adding a 3x2 pixel digit clock app --- apps/clck3x2/clock3x2-icon.js | 1 + apps/clck3x2/clock3x2.js | 121 ++++++++++++++++++++++++++++++++++ apps/clck3x2/clock3x2.json | 5 ++ apps/clck3x2/clock3x2.png | Bin 0 -> 145 bytes 4 files changed, 127 insertions(+) create mode 100644 apps/clck3x2/clock3x2-icon.js create mode 100644 apps/clck3x2/clock3x2.js create mode 100644 apps/clck3x2/clock3x2.json create mode 100644 apps/clck3x2/clock3x2.png diff --git a/apps/clck3x2/clock3x2-icon.js b/apps/clck3x2/clock3x2-icon.js new file mode 100644 index 000000000..4c4d22d34 --- /dev/null +++ b/apps/clck3x2/clock3x2-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("AH4AfgPn3k8g+8AqIdG8E8noOBAqIdIASiT/AFY=")); diff --git a/apps/clck3x2/clock3x2.js b/apps/clck3x2/clock3x2.js new file mode 100644 index 000000000..ff151e35a --- /dev/null +++ b/apps/clck3x2/clock3x2.js @@ -0,0 +1,121 @@ +(() => { + + // place your const, vars, functions or classes here + + const ox=10; // x offset + const oy=80; + const pw=20; // pixel width + const ps=5; // pixel spacing + const ds=10; // digit spacing + const ms=20; // middle space + + const x00=ox; // digit 0, pixel 0, x position + const x01=x00+pw+ps; + const x10=x01+pw+ds; + const x11=x10+pw+ps; + const x20=x11+pw+ms; + const x21=x20+pw+ps; + const x30=x21+pw+ds; + const x31=x30+pw+ps; + const xSpace=[[x00,x01], // all pixel x spacing + [x10,x11], + [x20,x21], + [x30,x31]]; + + const y0=oy; // y spacing + const y1=y0+pw+ps; + const y2=y1+pw+ps; + const ySpace=[y0, y1, y2]; + + const pixels = [[[0,0], // digit on/off pixels + [1,1], + [1,1]], + [[0,1], // digit 1 + [0,1], + [0,1]], + [[0,1], + [1,0], + [1,1]], + [[1,1], + [0,1], + [1,1]], + [[1,0], + [1,1], + [0,1]], + [[1,1], + [1,0], + [0,1]], + [[1,0], + [1,1], + [1,1]], + [[1,1], + [0,1], + [0,1]], + [[1,1], + [1,1], + [1,1]], + [[1,1], + [1,1], + [0,1]]]; + + let id = null; // timer interval id + + function drawTime() { + g.clear(); + let d = Date(); + let h = d.getHours(); + let m = d.getMinutes(); + + let digit = [Math.floor(h/10), h%10, Math.floor(m/10), m%10]; // time digit + + for (let id=0; id<4; id++){ + for (let xp=0; xp<2; xp++){ + for (let yp=0; yp<3; yp++){ + if (pixels[digit[id]][yp][xp]==1){ + g.fillRect(xSpace[id][xp], ySpace[yp], xSpace[id][xp]+pw, ySpace[yp]+pw); + } + } + } + } + } + + function planNextUpdate() { + let d = Date(); + let t = d.getSeconds()*1000 + d.getMilliseconds(); + let delta = (60000 - t) % 60000; // time till next minute + idTimeout = setTimeout(updateTime, delta); + } + + function stopPlanning() { + if(idTimeout) { + clearTimeout(idTimeout); + } + } + + function updateTime() { + drawTime(); + planNextUpdate(); + } + + Bangle.on('gesture', function(gesture) { + if (gesture && !Bangle.isLCDOn()) { + Bangle.setLCDPower(true); + } + }); + + // special function to handle display switch on + Bangle.on('lcdPower', (on) => { + if (on) { + drawWidgets(); + // call your app function here + updateTime(); + } else { + stopPlanning(); + } + }); + + // call your app function here + Bangle.setLCDTimeout(30); + updateTime(); + +})(); diff --git a/apps/clck3x2/clock3x2.json b/apps/clck3x2/clock3x2.json new file mode 100644 index 000000000..1ffd00f4f --- /dev/null +++ b/apps/clck3x2/clock3x2.json @@ -0,0 +1,5 @@ +{ + "name":"3x2 Pixel Clock", + "icon":"*clck3x2", + "src":"-clck3x2" +} diff --git a/apps/clck3x2/clock3x2.png b/apps/clck3x2/clock3x2.png new file mode 100644 index 0000000000000000000000000000000000000000..fe3272ce2de7f2c7fa5fed4292e1f14624ef41e0 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDB3?!H8JlO)I*aCb)Tv?b{{`~vnx$k%!P=vk2 z)7O>#F%P4loRD