From 4ed167d1b66ee94be5ecaf7e1a26a0afcb35697a Mon Sep 17 00:00:00 2001 From: Hank Date: Thu, 7 Jul 2022 13:08:59 +0200 Subject: [PATCH 1/9] Drink counter - init --- apps/drinkcounter/ChangeLog | 1 + apps/drinkcounter/README.md | 12 +++++++ apps/drinkcounter/app.js | 48 +++++++++++++++++++++++++ apps/drinkcounter/app.png | Bin 0 -> 419 bytes apps/drinkcounter/drinkcounter-icon.js | 1 + apps/drinkcounter/metadata.json | 17 +++++++++ 6 files changed, 79 insertions(+) create mode 100644 apps/drinkcounter/ChangeLog create mode 100644 apps/drinkcounter/README.md create mode 100644 apps/drinkcounter/app.js create mode 100644 apps/drinkcounter/app.png create mode 100644 apps/drinkcounter/drinkcounter-icon.js create mode 100644 apps/drinkcounter/metadata.json diff --git a/apps/drinkcounter/ChangeLog b/apps/drinkcounter/ChangeLog new file mode 100644 index 000000000..bb80ab4d7 --- /dev/null +++ b/apps/drinkcounter/ChangeLog @@ -0,0 +1 @@ +0.10: Initial release \ No newline at end of file diff --git a/apps/drinkcounter/README.md b/apps/drinkcounter/README.md new file mode 100644 index 000000000..298c82743 --- /dev/null +++ b/apps/drinkcounter/README.md @@ -0,0 +1,12 @@ +# Drink Counter + +Counts drinks you had for science. Calculates BAC. + +## Usage + + + + +## Creator + +Hank - contact at http://forum.espruino.com diff --git a/apps/drinkcounter/app.js b/apps/drinkcounter/app.js new file mode 100644 index 000000000..dcd1e8e76 --- /dev/null +++ b/apps/drinkcounter/app.js @@ -0,0 +1,48 @@ +Bangle.setLCDPower(1); +Bangle.setLCDTimeout(0); +g.reset(); +c = 1; + + +var icoBeer = require("heatshrink").decompress(atob("lEoxH+AG2BAAoecEpAoWC4fXAAIGGAAowTDxAmJE4YGGE5QeJE5QHHE7owJE0pQKE7pQJE86fnE5QJSE5YUHBAIJQYxIpFAAvGBBAJIExYoGDgIACBBApFExonCDYoAOFSAnbFJYnE6vVDYYFHAwakQE4YaFAoQGJEIYoME7QoEE7ogFE/4neTBgntY84n/E+7HUE64mDE8IAFEw4nDTBifIE9gmId7gALE5IGCAooGDE6gASE8yaME7gmOFIgAREqIAhA==")); +var icoCocktail = require("heatshrink").decompress(atob("lEoxH+AH4AJtgABEkgmiEiXGAAIllAAiXeEAPXAQQDCFBYmTEgYqDFBZNWAIZRME6IfBEAYuEE5J2UwIAaJ5QncFBB3DB4YGCACQnKTQgoXE5bIEE6qfKPAZRFA4MUABgmNPAonBCgQnPExgpFPIgoNEyBSF4wGBFBgmSABCjJTZwoXEzwoHE0AoFE0QnCFAQmhKAonjFAInCE0Qn/E/4n/E/4n/wInDFEAhBEwQoDFLYdCEwooEFTAjHAAwoYIYgAMPDglT")); +var icoShot = require("heatshrink").decompress(atob("lEoxH+AH4A/AH4A/AH4AqwIAgE+HXADRPME8ZQM5AnSZBQkGAAYngEYonfJA5QQE8zGJFAYfKFBwmKE4iYIE7rpIeYgAJE5woEEpQKHTxhQIIpJaHJxgn/E8zGQZBAnQYxxQRFQYnlFgon5FCYmDE6LjHZRQmPE5AAOE/4njFCTGQKCwmRKAgATE54oWEyAqTDZY")); + +function setColor(delta){ + c+=delta; + c = Math.max(c,0); + c = Math.min(c,2); + if (c<1){ + g.setColor(c,0,0); + Bangle.setLCDBrightness(c >= 0.1 ? c : 0.1); + }else{ + g.setColor(1,c-1,c-1); + Bangle.setLCDBrightness(1); + } + g.fillRect(0,0,g.getWidth(),g.getHeight()); +} + +function updownHandler(direction){ + if (direction == undefined){ + c=1; + setColor(0); + } else { + setColor(-direction * 0.1); + } +} + +setColor(0); + + g.drawImage(icoBeer,0,100); + g.drawImage(icoCocktail,40,100); + g.drawImage(icoShot,80,100); + +// Bangle 1: +// BTN1: light up toward white +// BTN3: light down to red +// BTN2: reset +// Bangle 2: +// Swipe up: light up toward white +// Swipe down: light down to red +// BTN1: reset +Bangle.setUI("updown", updownHandler); diff --git a/apps/drinkcounter/app.png b/apps/drinkcounter/app.png new file mode 100644 index 0000000000000000000000000000000000000000..b6aaecef9fae7df7f30af7adf4351e7ec61986dc GIT binary patch literal 419 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU3?z3ec*Fy#0|7oEuK)l4U$tr#i1;501VG{c z|3g>(X9)ezu{z_%djex0i+v90$D&= zpk5FYBpM3V0MrRo4zd8K6KDs}VvtE76<}eYp+G$l%R!caOaWR9v;gEfkcL$tgMhYy zOb0p$=ro|Co6j2@0-8C`)5S5w;`Gs}5BZu6I9e>{HGHqXb@a+aqjgnfCy()W@8l2W zUzIkyQSf?IlJ+N&E+V<`^VnEI#QIe+!y6gG&8%vatS0(2>Zr>mdKI;Vst0P*{_8~^|S literal 0 HcmV?d00001 diff --git a/apps/drinkcounter/drinkcounter-icon.js b/apps/drinkcounter/drinkcounter-icon.js new file mode 100644 index 000000000..8228b2616 --- /dev/null +++ b/apps/drinkcounter/drinkcounter-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("KCiI/tfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19eBgYGBgYGB19fX19fX19fX19fX19fX19fX19fX19fXgYGBgYHX14GBgYGBgYGBgYHX19fX19fX19fX19fX19fX19fX14GBgYHX19eBgYGB19fX19fX19fXgYGBgYGBgYGB19fX19fX19fX19eBgdfX19fX19eB19fX19fX19fX14GBgdfX19eBgYHX19fX19fX19fXgdfX19fX19fX19fX19fX19fX19eBgdfX19fX14GB19fX19fX19fX14HX19fX19fX19fX19fX19fX19fX19fX19fX19fXgdfX19fX19fX14HX19fX19fX19fX19fX19fX19fX19fX19fX19fX14GB19fX19fX19eB19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXgdfX19fX19fXgdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX14HX19fX19fX19eB19fX19fX19fX19fX19fX19fX19fX19fX19fX14HX19fX19fX19fXgdfX19fX19fX14HX19fX19fX19eB19fX19fX19eB19fX19fX19fX14GB19fX19fX14GBgdfX19fX19eBgYHX19fX19eBgdfX19fX19fX19fX14GBgYGBgYGBxoGBgYGBgYGBxsaBgYGBgYGBgdfX19fX19fX19fX19fXgYGBgYHGxsbGxoGBgYHGxsbGxsaBgYGBgdfX19fX19fX19fX19fX14GBxsbGxsbGxsbGxsbGxsbGxsbGxsbGgYGBgYHX19fX19fX19fX19eBgcbGxsbGxsbGxsbGxsbGxsbGxsbGxoGBgYGBgYHX19fX19fX19fXgYHGxsbV1cbGxsbV1cbGxsbV1dXGxsaBgYGBgYGBgdfX19fX19fX14GBxsbV1dXGxsbV1dXVxsbG1dXV1cbGgYHX14GBgYGB19fX19fX19eBgcbG1dXVxsbG1dXV1cbGxtXV1dXGxoGB19fXgYGBgdfX19fX19fXgYHGxtXV1cbGxtXV1dXGxsbV1dXVxoGBgdfX14GBgYHX19fX19fX14GBxsbV1dXGxsbV1dXVxsbG1dXV1caBgYHX19eBgYGB19fX19fX19eBgcbG1dXVxsbG1dXV1cbGxtXV1dXGgYGB19fXgYGBgdfX19fX19fXgYHG1dXV1cbGxtXV1dXGxsbV1dXVxoGBgdfX14GBgYHX19fX19fX14GBxtXV1dXGxsbV1dXVxsbG1dXV1cbGgYHX19eBgYGB19fX19fX19eBgcbG1dXVxsbG1dXV1cbGxtXV1dXGxoGB19fXgYGBgdfX19fX19fXgYHGxtXV1cbGxtXV1dXGxsbV1dXVxsaBgdfX14GBgYHX19fX19fX14GBxsbV1dXGxsbV1dXVxsbG1dXV1cbGgYHX19eBgYGB19fX19fX19eBgcbG1dXVxsbG1dXV1cbGxtXV1dXGgYGB19fXgYGBgdfX19fX19fXgYHGxtXV1cbGxtXV1dXGxsbV1dXVxoGBgdfXgYGBgYHX19fX19fX14GBxsbV1dXGxsbV1dXVxsbG1dXV1caBgYGBgYGBgYHX19fX19fX19eBgcbV1dXVxsbG1dXV1cbGxtXV1dXGxoGBgYGBgYGB19fX19fX19fXgYHG1dXV1cbGxtXV1dXGxsbV1dXVxsaBgYGBgYGB19fX19fX19fX14GBxsbV1dXGxsbV1dXVxsbG1dXV1cbGgYHX19fX19fX19fX19fX19eBgcbG1dXVxsbGxtXVxsbGxtXV1cbGxoGB19fX19fX19fX19fX19fXgYHGxsbGxsbGxsbGxsbGxsbGxsbGxsaBgdfX19fX19fX19fX19fX14GBxsbGxsbGxsbGxsbGxsbGxsbGxsaBgYHX19fX19fX19fX19fX19eBgcbGxsbGxsbGxsbGxsbGxsbGxsbGgYHX19fX19fX19fX19fX19fX19eBgYGBgYGBgYGBgYGBgYGBgYGBgdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19c=")) diff --git a/apps/drinkcounter/metadata.json b/apps/drinkcounter/metadata.json new file mode 100644 index 000000000..5930c6b5a --- /dev/null +++ b/apps/drinkcounter/metadata.json @@ -0,0 +1,17 @@ +{ + "id": "drinkcounter", + "name": "Drink Counter", + "shortName": "Drink Counter", + "version": "0.10", + "description": "Counts drinks you had for science.", + "allow_emulator":true, + "icon": "app.png", + "type": "app", + "tags": "health", + "supports": ["BANGLEJS","BANGLEJS2"], + "readme": "README.md", + "storage": [ + {"name":"drinkcounter.app.js","url":"app.js"}, + {"name":"drinkcounter.img","url":"drinkcounter-icon.js","evaluate":true} + ] +} \ No newline at end of file From 22a722346c7232576f5010c3f822c2702bc219a6 Mon Sep 17 00:00:00 2001 From: Hank Date: Thu, 7 Jul 2022 13:13:40 +0200 Subject: [PATCH 2/9] tabs --- apps/drinkcounter/app.js | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/apps/drinkcounter/app.js b/apps/drinkcounter/app.js index dcd1e8e76..64000ce2f 100644 --- a/apps/drinkcounter/app.js +++ b/apps/drinkcounter/app.js @@ -9,30 +9,29 @@ var icoCocktail = require("heatshrink").decompress(atob("lEoxH+AH4AJtgABEkgmiEiX var icoShot = require("heatshrink").decompress(atob("lEoxH+AH4A/AH4A/AH4AqwIAgE+HXADRPME8ZQM5AnSZBQkGAAYngEYonfJA5QQE8zGJFAYfKFBwmKE4iYIE7rpIeYgAJE5woEEpQKHTxhQIIpJaHJxgn/E8zGQZBAnQYxxQRFQYnlFgon5FCYmDE6LjHZRQmPE5AAOE/4njFCTGQKCwmRKAgATE54oWEyAqTDZY")); function setColor(delta){ - c+=delta; - c = Math.max(c,0); - c = Math.min(c,2); - if (c<1){ - g.setColor(c,0,0); - Bangle.setLCDBrightness(c >= 0.1 ? c : 0.1); - }else{ - g.setColor(1,c-1,c-1); - Bangle.setLCDBrightness(1); - } - g.fillRect(0,0,g.getWidth(),g.getHeight()); + c+=delta; + c = Math.max(c,0); + c = Math.min(c,2); + if (c<1){ + g.setColor(c,0,0); + Bangle.setLCDBrightness(c >= 0.1 ? c : 0.1); + }else{ + g.setColor(1,c-1,c-1); + Bangle.setLCDBrightness(1); + } + g.fillRect(0,0,g.getWidth(),g.getHeight()); } function updownHandler(direction){ - if (direction == undefined){ - c=1; - setColor(0); - } else { - setColor(-direction * 0.1); - } +if (direction == undefined){ + c=1; + setColor(0); + } else { + setColor(-direction * 0.1); + } } setColor(0); - g.drawImage(icoBeer,0,100); g.drawImage(icoCocktail,40,100); g.drawImage(icoShot,80,100); From c3382032c20b92d453482ab2a6865b2d30e73c12 Mon Sep 17 00:00:00 2001 From: Hank Date: Thu, 7 Jul 2022 13:17:51 +0200 Subject: [PATCH 3/9] png --- apps/drinkcounter/app.png | Bin 419 -> 302 bytes apps/drinkcounter/drinkcounter-icon.js | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/drinkcounter/app.png b/apps/drinkcounter/app.png index b6aaecef9fae7df7f30af7adf4351e7ec61986dc..daf04c14ac34e42a503fde302e03349c906efd2a 100644 GIT binary patch literal 302 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-s>?NMQuI$g)*}3`61^gat2MTc( zctjR6FvuMQVaCImA;CaFmUKs7M+SzC{oH>NS%G|>0G|-o|NsB5TD9u`Dh41uWzVIP zK=GxXE{-7;x86>@%h#a5(fYIUe|g?gMN1pE;?>>fT#c;fOS5=>c`YD*_w&qJw~)g} z**$MRJ*}AclCj`KF2mkAsxw$J7$=-N_?A^rYvF3E!<)9f*AhFi#C?@_SD=p6vhrD0 zy^<_P?rvmW^=O`!#za{Sxv$-4J=hko9MEUp#o(d-*YQDQr19E=8-708WXH_**(X9)ezu{z_%djex0i+v90$D&= zpk5FYBpM3V0MrRo4zd8K6KDs}VvtE76<}eYp+G$l%R!caOaWR9v;gEfkcL$tgMhYy zOb0p$=ro|Co6j2@0-8C`)5S5w;`Gs}5BZu6I9e>{HGHqXb@a+aqjgnfCy()W@8l2W zUzIkyQSf?IlJ+N&E+V<`^VnEI#QIe+!y6gG&8%vatS0(2>Zr>mdKI;Vst0P*{_8~^|S diff --git a/apps/drinkcounter/drinkcounter-icon.js b/apps/drinkcounter/drinkcounter-icon.js index 8228b2616..27bce0f0e 100644 --- a/apps/drinkcounter/drinkcounter-icon.js +++ b/apps/drinkcounter/drinkcounter-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("KCiI/tfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19eBgYGBgYGB19fX19fX19fX19fX19fX19fX19fX19fXgYGBgYHX14GBgYGBgYGBgYHX19fX19fX19fX19fX19fX19fX14GBgYHX19eBgYGB19fX19fX19fXgYGBgYGBgYGB19fX19fX19fX19eBgdfX19fX19eB19fX19fX19fX14GBgdfX19eBgYHX19fX19fX19fXgdfX19fX19fX19fX19fX19fX19eBgdfX19fX14GB19fX19fX19fX14HX19fX19fX19fX19fX19fX19fX19fX19fX19fXgdfX19fX19fX14HX19fX19fX19fX19fX19fX19fX19fX19fX19fX14GB19fX19fX19eB19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXgdfX19fX19fXgdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX14HX19fX19fX19eB19fX19fX19fX19fX19fX19fX19fX19fX19fX14HX19fX19fX19fXgdfX19fX19fX14HX19fX19fX19eB19fX19fX19eB19fX19fX19fX14GB19fX19fX14GBgdfX19fX19eBgYHX19fX19eBgdfX19fX19fX19fX14GBgYGBgYGBxoGBgYGBgYGBxsaBgYGBgYGBgdfX19fX19fX19fX19fXgYGBgYHGxsbGxoGBgYHGxsbGxsaBgYGBgdfX19fX19fX19fX19fX14GBxsbGxsbGxsbGxsbGxsbGxsbGxsbGgYGBgYHX19fX19fX19fX19eBgcbGxsbGxsbGxsbGxsbGxsbGxsbGxoGBgYGBgYHX19fX19fX19fXgYHGxsbV1cbGxsbV1cbGxsbV1dXGxsaBgYGBgYGBgdfX19fX19fX14GBxsbV1dXGxsbV1dXVxsbG1dXV1cbGgYHX14GBgYGB19fX19fX19eBgcbG1dXVxsbG1dXV1cbGxtXV1dXGxoGB19fXgYGBgdfX19fX19fXgYHGxtXV1cbGxtXV1dXGxsbV1dXVxoGBgdfX14GBgYHX19fX19fX14GBxsbV1dXGxsbV1dXVxsbG1dXV1caBgYHX19eBgYGB19fX19fX19eBgcbG1dXVxsbG1dXV1cbGxtXV1dXGgYGB19fXgYGBgdfX19fX19fXgYHG1dXV1cbGxtXV1dXGxsbV1dXVxoGBgdfX14GBgYHX19fX19fX14GBxtXV1dXGxsbV1dXVxsbG1dXV1cbGgYHX19eBgYGB19fX19fX19eBgcbG1dXVxsbG1dXV1cbGxtXV1dXGxoGB19fXgYGBgdfX19fX19fXgYHGxtXV1cbGxtXV1dXGxsbV1dXVxsaBgdfX14GBgYHX19fX19fX14GBxsbV1dXGxsbV1dXVxsbG1dXV1cbGgYHX19eBgYGB19fX19fX19eBgcbG1dXVxsbG1dXV1cbGxtXV1dXGgYGB19fXgYGBgdfX19fX19fXgYHGxtXV1cbGxtXV1dXGxsbV1dXVxoGBgdfXgYGBgYHX19fX19fX14GBxsbV1dXGxsbV1dXVxsbG1dXV1caBgYGBgYGBgYHX19fX19fX19eBgcbV1dXVxsbG1dXV1cbGxtXV1dXGxoGBgYGBgYGB19fX19fX19fXgYHG1dXV1cbGxtXV1dXGxsbV1dXVxsaBgYGBgYGB19fX19fX19fX14GBxsbV1dXGxsbV1dXVxsbG1dXV1cbGgYHX19fX19fX19fX19fX19eBgcbG1dXVxsbGxtXVxsbGxtXV1cbGxoGB19fX19fX19fX19fX19fXgYHGxsbGxsbGxsbGxsbGxsbGxsbGxsaBgdfX19fX19fX19fX19fX14GBxsbGxsbGxsbGxsbGxsbGxsbGxsaBgYHX19fX19fX19fX19fX19eBgcbGxsbGxsbGxsbGxsbGxsbGxsbGgYHX19fX19fX19fX19fX19fX19eBgYGBgYGBgYGBgYGBgYGBgYGBgdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19c=")) +require("heatshrink").decompress(atob("mEwxH+64A/AH4A/AH4ABwIAFE0gtIGDwfGExg4bChAcKFIwwUIbYvnDjQucMCQvdDyIvvX94SKBKQvTCY4IBBKDuRDwwAE4wIIBJClWEgoACBBAxFaq4jGABwyYF7YxTF4nV6ojDAo4GDYjAvDEQoFCAxIpDGCgvaGAgvlFAov/F+y4MF+rvvF/4v/d9gvXFwYvpAAouPF4a4MX5Av0FyCPWF4QqRF5wGCAooGDF7gASF9y6UF7guWGIgARFrIA/AH4A/AEo")) From 927608be5474aaa8ae07f959edf0275beefc99e7 Mon Sep 17 00:00:00 2001 From: Hank Date: Thu, 7 Jul 2022 16:40:53 +0200 Subject: [PATCH 4/9] Adding time and beer. --- apps/drinkcounter/app.js | 157 +++++++++++++++++++++++++++++++-------- 1 file changed, 124 insertions(+), 33 deletions(-) diff --git a/apps/drinkcounter/app.js b/apps/drinkcounter/app.js index 64000ce2f..0f09d59c8 100644 --- a/apps/drinkcounter/app.js +++ b/apps/drinkcounter/app.js @@ -1,47 +1,138 @@ -Bangle.setLCDPower(1); -Bangle.setLCDTimeout(0); -g.reset(); + c = 1; +setting = require("Storage").readJSON("setting.json",1); +E.setTimeZone(setting.timezone); // timezone = 1 for MEZ, = 2 for MESZ +var _12hour = (require("Storage").readJSON("setting.json",1)||{})["12hour"]||false; +var ampm = "AM"; +let drag; var icoBeer = require("heatshrink").decompress(atob("lEoxH+AG2BAAoecEpAoWC4fXAAIGGAAowTDxAmJE4YGGE5QeJE5QHHE7owJE0pQKE7pQJE86fnE5QJSE5YUHBAIJQYxIpFAAvGBBAJIExYoGDgIACBBApFExonCDYoAOFSAnbFJYnE6vVDYYFHAwakQE4YaFAoQGJEIYoME7QoEE7ogFE/4neTBgntY84n/E+7HUE64mDE8IAFEw4nDTBifIE9gmId7gALE5IGCAooGDE6gASE8yaME7gmOFIgAREqIAhA==")); var icoCocktail = require("heatshrink").decompress(atob("lEoxH+AH4AJtgABEkgmiEiXGAAIllAAiXeEAPXAQQDCFBYmTEgYqDFBZNWAIZRME6IfBEAYuEE5J2UwIAaJ5QncFBB3DB4YGCACQnKTQgoXE5bIEE6qfKPAZRFA4MUABgmNPAonBCgQnPExgpFPIgoNEyBSF4wGBFBgmSABCjJTZwoXEzwoHE0AoFE0QnCFAQmhKAonjFAInCE0Qn/E/4n/E/4n/wInDFEAhBEwQoDFLYdCEwooEFTAjHAAwoYIYgAMPDglT")); var icoShot = require("heatshrink").decompress(atob("lEoxH+AH4A/AH4A/AH4AqwIAgE+HXADRPME8ZQM5AnSZBQkGAAYngEYonfJA5QQE8zGJFAYfKFBwmKE4iYIE7rpIeYgAJE5woEEpQKHTxhQIIpJaHJxgn/E8zGQZBAnQYxxQRFQYnlFgon5FCYmDE6LjHZRQmPE5AAOE/4njFCTGQKCwmRKAgATE54oWEyAqTDZY")); +var drawTimeout; +var activeDrink = 0; +var drinks = [0,0,0]; -function setColor(delta){ - c+=delta; - c = Math.max(c,0); - c = Math.min(c,2); - if (c<1){ - g.setColor(c,0,0); - Bangle.setLCDBrightness(c >= 0.1 ? c : 0.1); - }else{ - g.setColor(1,c-1,c-1); - Bangle.setLCDBrightness(1); - } - g.fillRect(0,0,g.getWidth(),g.getHeight()); -} - -function updownHandler(direction){ -if (direction == undefined){ - c=1; - setColor(0); +function updateTime(){ + var d = new Date(); + var da = d.toString().split(" "); + var time = da[4].split(":"); + var hours = time[0]; + var minutes = time[1]; + if (_12hour){ + //do 12 hour stuff + if (hours > 12) { + ampm = "PM"; + hours = hours - 12; + if (hours < 10) hours = doublenum(hours); + } else { + ampm = "AM"; + } } else { - setColor(-direction * 0.1); - } + ampm = "" + } + g.setBgColor(g.theme.bg).setColor(g.theme.bg).fillRect(0,0,176,20); //Clear + g.setFontAlign(0,0); // center font + g.setBgColor(g.theme.bg).setColor(g.theme.fg); + g.setFont("Vector",14); + g.drawString("Time: " + hours + ":" + minutes + " " + ampm,100,10); + queueDrawTime(); } -setColor(0); +function queueDrawTime() { + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + updateTime(); + }, 20000 - (Date.now() % 20000)); +} + +function updateDrinks(){ + g.setBgColor(g.theme.bg).setColor(g.theme.bg).fillRect(0,145,176,176); //Clear + g.setFont("Vector",20).setColor(g.theme.fg); + g.drawString(drinks[activeDrink], (40 * (activeDrink + 1)) -20, 165); + console.log(drinks[activeDrink] + " drinks of drink #" + activeDrink); + +} + +function addDrink(){ + drinks[activeDrink] = drinks[activeDrink] + 1; + updateDrinks(); +} + +function removeDrink(){ + if (drinks[activeDrink] > 0) drinks[activeDrink] = drinks[activeDrink] - 1; + updateDrinks(); +} + + + +function initDragEvents() { + Bangle.on("drag", e => { + + if (!drag) { // start dragging + drag = {x: e.x, y: e.y}; + } else if (!e.b) { // released + const dx = e.x-drag.x, dy = e.y-drag.y; + drag = null; + if (Math.abs(dx)>Math.abs(dy)+10) { + // horizontal + if (dx < dy) { + console.log("left " + dx + " " + dy); + } else { + console.log("right " + dx + " " + dy); + } + } else if (Math.abs(dy)>Math.abs(dx)+10) { + // vertical + if (dx < dy) { + console.log("down " + dx + " " + dy); + removeDrink(); + } else { + console.log("up " + dx + " " + dy); + addDrink(); + } + + } + } +}); +} + + + +// Todo +// Add first drink time + + + + +g.reset(); +g.clear(); +Bangle.loadWidgets(); +Bangle.drawWidgets(); + + + +g.setBgColor(g.theme.bg); g.drawImage(icoBeer,0,100); g.drawImage(icoCocktail,40,100); g.drawImage(icoShot,80,100); + + -// Bangle 1: -// BTN1: light up toward white -// BTN3: light down to red -// BTN2: reset -// Bangle 2: -// Swipe up: light up toward white -// Swipe down: light down to red -// BTN1: reset -Bangle.setUI("updown", updownHandler); + + + + +//Bangle.setUI("updown", updownHandler); + + + +if (drawTimeout) clearTimeout(drawTimeout); +drawTimeout = undefined; +updateTime(); +queueDrawTime(); +initDragEvents(); +updateDrinks(); + + From 4338cdda73a429ff8791f975bdc648c560ad490c Mon Sep 17 00:00:00 2001 From: Hank Date: Thu, 7 Jul 2022 18:23:28 +0200 Subject: [PATCH 5/9] clearRect --- apps/drinkcounter/app.js | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/apps/drinkcounter/app.js b/apps/drinkcounter/app.js index 0f09d59c8..7494c17ca 100644 --- a/apps/drinkcounter/app.js +++ b/apps/drinkcounter/app.js @@ -1,6 +1,4 @@ -c = 1; - setting = require("Storage").readJSON("setting.json",1); E.setTimeZone(setting.timezone); // timezone = 1 for MEZ, = 2 for MESZ var _12hour = (require("Storage").readJSON("setting.json",1)||{})["12hour"]||false; @@ -32,11 +30,10 @@ function updateTime(){ } else { ampm = "" } - g.setBgColor(g.theme.bg).setColor(g.theme.bg).fillRect(0,0,176,20); //Clear + g.setBgColor(g.theme.bg).setColor(g.theme.bg).fillRect(0,24,176,44); //Clear g.setFontAlign(0,0); // center font g.setBgColor(g.theme.bg).setColor(g.theme.fg); - g.setFont("Vector",14); - g.drawString("Time: " + hours + ":" + minutes + " " + ampm,100,10); + g.setFont("Vector",14).drawString("Time: " + hours + ":" + minutes + " " + ampm,100,34); queueDrawTime(); } @@ -49,9 +46,8 @@ function queueDrawTime() { } function updateDrinks(){ - g.setBgColor(g.theme.bg).setColor(g.theme.bg).fillRect(0,145,176,176); //Clear - g.setFont("Vector",20).setColor(g.theme.fg); - g.drawString(drinks[activeDrink], (40 * (activeDrink + 1)) -20, 165); + g.setBgColor(g.theme.bg).clearRect(0,145,176,176); //Clear + g.setFont("Vector",20).setColor(g.theme.fg).drawString(drinks[activeDrink], (40 * (activeDrink + 1)) - 20, 155); console.log(drinks[activeDrink] + " drinks of drink #" + activeDrink); } @@ -70,7 +66,6 @@ function removeDrink(){ function initDragEvents() { Bangle.on("drag", e => { - if (!drag) { // start dragging drag = {x: e.x, y: e.y}; } else if (!e.b) { // released @@ -92,7 +87,6 @@ function initDragEvents() { console.log("up " + dx + " " + dy); addDrink(); } - } } }); @@ -114,25 +108,19 @@ Bangle.drawWidgets(); g.setBgColor(g.theme.bg); - g.drawImage(icoBeer,0,100); - g.drawImage(icoCocktail,40,100); - g.drawImage(icoShot,80,100); +g.drawImage(icoBeer,0,100); +g.drawImage(icoCocktail,40,100); +g.drawImage(icoShot,80,100); - - - -//Bangle.setUI("updown", updownHandler); - - if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = undefined; updateTime(); queueDrawTime(); initDragEvents(); -updateDrinks(); +//updateDrinks(); From 55675446fa62f428879598a51667b917934cfbd4 Mon Sep 17 00:00:00 2001 From: Hank Date: Thu, 7 Jul 2022 18:45:16 +0200 Subject: [PATCH 6/9] Drinks selectable --- apps/drinkcounter/app.js | 41 ++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/apps/drinkcounter/app.js b/apps/drinkcounter/app.js index 7494c17ca..03303d7a5 100644 --- a/apps/drinkcounter/app.js +++ b/apps/drinkcounter/app.js @@ -1,3 +1,6 @@ +g.reset().clear(); +Bangle.loadWidgets(); +Bangle.drawWidgets(); setting = require("Storage").readJSON("setting.json",1); E.setTimeZone(setting.timezone); // timezone = 1 for MEZ, = 2 for MESZ @@ -11,6 +14,7 @@ var icoShot = require("heatshrink").decompress(atob("lEoxH+AH4A/AH4A/AH4AqwIAgE+ var drawTimeout; var activeDrink = 0; var drinks = [0,0,0]; +const maxDrinks = 2; // 3 drinks function updateTime(){ var d = new Date(); @@ -30,7 +34,7 @@ function updateTime(){ } else { ampm = "" } - g.setBgColor(g.theme.bg).setColor(g.theme.bg).fillRect(0,24,176,44); //Clear + g.setBgColor(g.theme.bg).clearRect(0,24,176,44); //Clear g.setFontAlign(0,0); // center font g.setBgColor(g.theme.bg).setColor(g.theme.fg); g.setFont("Vector",14).drawString("Time: " + hours + ":" + minutes + " " + ampm,100,34); @@ -46,10 +50,18 @@ function queueDrawTime() { } function updateDrinks(){ + g.setBgColor(g.theme.bg).clearRect(0,145,176,176); //Clear - g.setFont("Vector",20).setColor(g.theme.fg).drawString(drinks[activeDrink], (40 * (activeDrink + 1)) - 20, 155); - console.log(drinks[activeDrink] + " drinks of drink #" + activeDrink); - + for (let i = 0; i <= maxDrinks; i++) { + if (i == activeDrink) { + g.setColor(g.theme.fg).fillRect((40 * (i + 1)) - 40 ,145,(40 * (i + 1)) - 40 + 40,176); + g.setColor(g.theme.bg); + } else { + g.setColor(g.theme.fg); + } + g.setFont("Vector",20).drawString(drinks[i], (40 * (i + 1)) - 20, 160); + console.log(drinks[activeDrink] + " drinks of drink #" + i + " - Active: " + activeDrink); + } } function addDrink(){ @@ -62,6 +74,15 @@ function removeDrink(){ updateDrinks(); } +function previousDrink(){ + if (activeDrink > 0) activeDrink = activeDrink - 1; + updateDrinks(); +} + +function nextDrink(){ + if (activeDrink < maxDrinks) activeDrink = activeDrink + 1; + updateDrinks(); +} function initDragEvents() { @@ -75,8 +96,10 @@ function initDragEvents() { // horizontal if (dx < dy) { console.log("left " + dx + " " + dy); + previousDrink(); } else { console.log("right " + dx + " " + dy); + nextDrink(); } } else if (Math.abs(dy)>Math.abs(dx)+10) { // vertical @@ -100,12 +123,6 @@ function initDragEvents() { -g.reset(); -g.clear(); -Bangle.loadWidgets(); -Bangle.drawWidgets(); - - g.setBgColor(g.theme.bg); g.drawImage(icoBeer,0,100); @@ -121,6 +138,6 @@ drawTimeout = undefined; updateTime(); queueDrawTime(); initDragEvents(); -//updateDrinks(); - +updateDrinks(); + From 4e1f52ea26e4cc1533ec34998daf6e0e60b4fc24 Mon Sep 17 00:00:00 2001 From: Hank Date: Thu, 7 Jul 2022 19:31:30 +0200 Subject: [PATCH 7/9] added ebac --- apps/drinkcounter/app.js | 82 +++++++++++++++++++++++++++++++++------- 1 file changed, 68 insertions(+), 14 deletions(-) diff --git a/apps/drinkcounter/app.js b/apps/drinkcounter/app.js index 03303d7a5..b1061b381 100644 --- a/apps/drinkcounter/app.js +++ b/apps/drinkcounter/app.js @@ -15,6 +15,61 @@ var drawTimeout; var activeDrink = 0; var drinks = [0,0,0]; const maxDrinks = 2; // 3 drinks +var firstDrinkTime = null; + + + +//static float get_ebac() +//{ +// float sum_drinks = getSumDrinks(drinks); +// +// int day1 = current_time.tm_yday; +// int hour1 = current_time.tm_hour; +// int min1 = current_time.tm_min; +// long int combine1 = min1+hour1*60+day1*24*60; +// +// int day2 = settings.first_drink_time.tm_yday; +// int hour2 = settings.first_drink_time.tm_hour; +// int min2 = settings.first_drink_time.tm_min; +// long int combine2 = min2+hour2*60+day2*24*60; +// +// unsigned int time_diff = abs(combine1 - combine2); +// +// if(settings.beer_size==1) +// sum_drinks+=*(drinks[0].num_drinks)/0.33*0.25-*(drinks[0].num_drinks); +// if(settings.beer_size==2) +// sum_drinks+=*(drinks[0].num_drinks)/0.33*0.5-*(drinks[0].num_drinks); +// if(settings.beer_size==3) +// sum_drinks+=*(drinks[0].num_drinks)*3.0-*(drinks[0].num_drinks); +// +// float bw = settings.sex==0 ? 0.58f:0.49f; +// float scale_factor = settings.unit==0? 1.0f:0.453592f; // 0 = kg, 1 = pounds +// float multiplication = settings.output==0? 10.f:1.f; //0 = %o, 1 = % +// return( ((0.806f * sum_drinks * 1.2f)/(bw*(float)settings.weight*scale_factor) - (0.017f * (time_diff/60.f)))*multiplication); +//} + +function drawEbac(){ + if (firstDrinkTime) { + var sum_drinks = drinks[0] + drinks[1] + drinks[2]; + + // TODO: Settings + var bw = 0.58; //bw = settings.sex==0 ? 0.58f:0.49f; + var weight = 80 * 0.453592; //* scale factor: 1.0f:0.453592f; // 0 = kg, 1 = pounds + var multiplication = 10; //10.f:1.f; //0 = %o, 1 = % + + var currentTime = new Date(); + var time_diff = Math.floor(((currentTime - firstDrinkTime) % 86400000) / 3600000); + + console.log("timediff: " + time_diff); + + ebac = Math.round(((0.806 * sum_drinks * 1.2)/(bw*weight) - (0.017 * (time_diff/60)))*multiplication * 100) / 100 + console.log("BAC: " + ebac); + g.clearRect(0,34 + 20 + 8,176,34 + 20 + 20 + 8); //Clear + g.setFontAlign(0,0).setFont("Vector",15).setColor(g.theme.fg).drawString("BAC: " + ebac, 90, 74); + } +} + + function updateTime(){ var d = new Date(); @@ -37,7 +92,7 @@ function updateTime(){ g.setBgColor(g.theme.bg).clearRect(0,24,176,44); //Clear g.setFontAlign(0,0); // center font g.setBgColor(g.theme.bg).setColor(g.theme.fg); - g.setFont("Vector",14).drawString("Time: " + hours + ":" + minutes + " " + ampm,100,34); + g.setFont("Vector",14).drawString("Time: " + hours + ":" + minutes + " " + ampm,90,34); queueDrawTime(); } @@ -50,21 +105,30 @@ function queueDrawTime() { } function updateDrinks(){ - g.setBgColor(g.theme.bg).clearRect(0,145,176,176); //Clear for (let i = 0; i <= maxDrinks; i++) { if (i == activeDrink) { - g.setColor(g.theme.fg).fillRect((40 * (i + 1)) - 40 ,145,(40 * (i + 1)) - 40 + 40,176); + g.setColor(g.theme.fg).fillRect((40 * (i + 1)) - 40 ,145,(40 * (i + 1)),176); g.setColor(g.theme.bg); } else { g.setColor(g.theme.fg); } g.setFont("Vector",20).drawString(drinks[i], (40 * (i + 1)) - 20, 160); - console.log(drinks[activeDrink] + " drinks of drink #" + i + " - Active: " + activeDrink); + console.log(drinks[i] + " drinks of drink #" + i + " - Active: " + activeDrink); } + drawEbac(); } function addDrink(){ + if (!firstDrinkTime){ + firstDrinkTime = new Date(); + var dafirstDrinkTime = firstDrinkTime.toString().split(" "); + var firstDrinkTimeTime = dafirstDrinkTime[4].split(":"); + var firstDrinkTimeHours = firstDrinkTimeTime[0]; + var firstDrinkTimeMinutes = firstDrinkTimeTime[1]; + console.log("FIRST drink @ " + firstDrinkTime + " = " + firstDrinkTime.toString()); + g.setFontAlign(0,0).setFont("Vector",15).drawString("1st drink @ " + firstDrinkTimeHours + ":" + firstDrinkTimeMinutes, 90, 34 + 20 ); + } drinks[activeDrink] = drinks[activeDrink] + 1; updateDrinks(); } @@ -116,20 +180,10 @@ function initDragEvents() { } - -// Todo -// Add first drink time - - - - - g.setBgColor(g.theme.bg); g.drawImage(icoBeer,0,100); g.drawImage(icoCocktail,40,100); g.drawImage(icoShot,80,100); - - From eb68aa4a4c3f80416f73be9123e83bcd0d92bf53 Mon Sep 17 00:00:00 2001 From: Hank Date: Fri, 8 Jul 2022 07:41:11 +0200 Subject: [PATCH 8/9] New BAC calculation --- apps/drinkcounter/README.md | 1 + apps/drinkcounter/app.js | 49 +++++++++++++++++++++++++++++++------ 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/apps/drinkcounter/README.md b/apps/drinkcounter/README.md index 298c82743..9787c1b92 100644 --- a/apps/drinkcounter/README.md +++ b/apps/drinkcounter/README.md @@ -4,6 +4,7 @@ Counts drinks you had for science. Calculates BAC. ## Usage +Swipe left/right to select drink. Swipe up/down to add/remove drinks. diff --git a/apps/drinkcounter/app.js b/apps/drinkcounter/app.js index b1061b381..317fc906e 100644 --- a/apps/drinkcounter/app.js +++ b/apps/drinkcounter/app.js @@ -48,21 +48,54 @@ var firstDrinkTime = null; // return( ((0.806f * sum_drinks * 1.2f)/(bw*(float)settings.weight*scale_factor) - (0.017f * (time_diff/60.f)))*multiplication); //} -function drawEbac(){ +//function drawEbac(){ +// if (firstDrinkTime) { +// var sum_drinks = drinks[0] + drinks[1] + drinks[2]; +// +// // TODO: Settings +// var bw = 0.58; //bw = settings.sex==0 ? 0.58f:0.49f; +// var weight = 80 * 0.453592; //* scale factor: 1.0f:0.453592f; // 0 = kg, 1 = pounds +// var multiplication = 10; //10.f:1.f; //0 = %o, 1 = % +// +// var currentTime = new Date(); +// var time_diff = Math.floor(((currentTime - firstDrinkTime) % 86400000) / 3600000); +// +// console.log("timediff: " + time_diff); +// +// ebac = Math.round(((0.806 * sum_drinks * 1.2)/(bw*weight) - (0.017 * (time_diff/60)))*multiplication * 100) / 100 +// console.log("BAC: " + ebac); +// g.clearRect(0,34 + 20 + 8,176,34 + 20 + 20 + 8); //Clear +// g.setFontAlign(0,0).setFont("Vector",15).setColor(g.theme.fg).drawString("BAC: " + ebac, 90, 74); +// } +//} + + +// Beer: 0.3L 12g - 0.5L 20g +// Radler: 0.3L 6g - 0.5L 10g +// Wine: 0.2L 16g +// Jäger Shot: 0.02L 5.6g +// sex: Women 60 - Men 70 (Percent) + + +// Formula: Alcohol in g /(Body weight in kg x sex) – (0,15 x Hours) = bac per mille +// Example: 5 Beer (0.3L=12g), 80KG, Male (70%), 5 hours +// (5 * 12) / (80 / 100 * 70) - (0.15 * 5) + +function drawBac(){ if (firstDrinkTime) { var sum_drinks = drinks[0] + drinks[1] + drinks[2]; // TODO: Settings - var bw = 0.58; //bw = settings.sex==0 ? 0.58f:0.49f; - var weight = 80 * 0.453592; //* scale factor: 1.0f:0.453592f; // 0 = kg, 1 = pounds - var multiplication = 10; //10.f:1.f; //0 = %o, 1 = % + var sex = 70; // TODO + var weight = 80; // kg, TODO: pounds + var alcoholInG = 12; // TODO var currentTime = new Date(); var time_diff = Math.floor(((currentTime - firstDrinkTime) % 86400000) / 3600000); console.log("timediff: " + time_diff); - - ebac = Math.round(((0.806 * sum_drinks * 1.2)/(bw*weight) - (0.017 * (time_diff/60)))*multiplication * 100) / 100 + ebac = Math.round( ((sum_drinks * alcoholInG) / (weight / 100 * sex) - (0.15 * time_diff) ) * 100) / 100 + console.log("BAC: " + ebac); g.clearRect(0,34 + 20 + 8,176,34 + 20 + 20 + 8); //Clear g.setFontAlign(0,0).setFont("Vector",15).setColor(g.theme.fg).drawString("BAC: " + ebac, 90, 74); @@ -87,7 +120,7 @@ function updateTime(){ ampm = "AM"; } } else { - ampm = "" + ampm = ""; } g.setBgColor(g.theme.bg).clearRect(0,24,176,44); //Clear g.setFontAlign(0,0); // center font @@ -116,7 +149,7 @@ function updateDrinks(){ g.setFont("Vector",20).drawString(drinks[i], (40 * (i + 1)) - 20, 160); console.log(drinks[i] + " drinks of drink #" + i + " - Active: " + activeDrink); } - drawEbac(); + drawBac(); } function addDrink(){ From 51d1fab4e4709270ffe97a0f4a6fea3148ff1396 Mon Sep 17 00:00:00 2001 From: Hank Date: Fri, 8 Jul 2022 18:41:58 +0200 Subject: [PATCH 9/9] Readme --- apps/drinkcounter/ChangeLog | 2 +- apps/drinkcounter/README.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/drinkcounter/ChangeLog b/apps/drinkcounter/ChangeLog index bb80ab4d7..596ed8040 100644 --- a/apps/drinkcounter/ChangeLog +++ b/apps/drinkcounter/ChangeLog @@ -1 +1 @@ -0.10: Initial release \ No newline at end of file +0.10: Initial release - still work in progress \ No newline at end of file diff --git a/apps/drinkcounter/README.md b/apps/drinkcounter/README.md index 9787c1b92..708f350e9 100644 --- a/apps/drinkcounter/README.md +++ b/apps/drinkcounter/README.md @@ -1,5 +1,6 @@ # Drink Counter +Development still in progress. Still missing config page etv. This is only a demo for now! Counts drinks you had for science. Calculates BAC. ## Usage