From 5764eea4d9b53f9fdb2c300fd07a2b8938e3a886 Mon Sep 17 00:00:00 2001 From: Hilmar Strauch <56518493+HilmarSt@users.noreply.github.com> Date: Fri, 11 Feb 2022 18:54:04 +0100 Subject: [PATCH 1/7] Update metadata.json --- apps/widmp/metadata.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/widmp/metadata.json b/apps/widmp/metadata.json index 9c7506a09..f0d737c01 100644 --- a/apps/widmp/metadata.json +++ b/apps/widmp/metadata.json @@ -1,8 +1,8 @@ { "id": "widmp", "name": "Moon Phase Widget", - "version": "0.02", - "description": "Display the current moon phase in blueish for the northern hemisphere in eight phases", + "version": "0.04", + "description": "Display the current moon phase in blueish for the northern hemisphere", "icon": "widget.png", "type": "widget", "tags": "widget,tools", From a1851570b2447c8554fe51dccbe7fba2acc986e1 Mon Sep 17 00:00:00 2001 From: Hilmar Strauch <56518493+HilmarSt@users.noreply.github.com> Date: Fri, 11 Feb 2022 18:57:00 +0100 Subject: [PATCH 2/7] Update ChangeLog --- apps/widmp/ChangeLog | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/widmp/ChangeLog b/apps/widmp/ChangeLog index 3996d9e74..f8f8fa25b 100644 --- a/apps/widmp/ChangeLog +++ b/apps/widmp/ChangeLog @@ -1,3 +1,4 @@ 0.01: New App! 0.02: Fix position and overdraw bugs - Better memory usage, theme support +0.03: Better memory usage, theme support +0.04: Replace the 8 phases by an exact calculation, see forum.espruino.com/conversations/371985 From da7b934cb1dd2da2334b2fdb30cb14f1b4319d0e Mon Sep 17 00:00:00 2001 From: Hilmar Strauch <56518493+HilmarSt@users.noreply.github.com> Date: Fri, 11 Feb 2022 19:01:07 +0100 Subject: [PATCH 3/7] Update ChangeLog --- apps/widmp/ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/widmp/ChangeLog b/apps/widmp/ChangeLog index f8f8fa25b..02658296a 100644 --- a/apps/widmp/ChangeLog +++ b/apps/widmp/ChangeLog @@ -1,4 +1,4 @@ 0.01: New App! 0.02: Fix position and overdraw bugs 0.03: Better memory usage, theme support -0.04: Replace the 8 phases by an exact calculation, see forum.espruino.com/conversations/371985 +0.04: Replace the 8 phases by a more exact drawing, see forum.espruino.com/conversations/371985 From 0cbdc5210b535623977d3ef534e422e5260b5d43 Mon Sep 17 00:00:00 2001 From: Hilmar Strauch <56518493+HilmarSt@users.noreply.github.com> Date: Fri, 11 Feb 2022 19:13:33 +0100 Subject: [PATCH 4/7] Update widget.js Replace the 8 phases by a more exact drawing, see forum.espruino.com/conversations/371985 --- apps/widmp/widget.js | 65 ++++++++++++++++++++++++++++++-------------- 1 file changed, 45 insertions(+), 20 deletions(-) diff --git a/apps/widmp/widget.js b/apps/widmp/widget.js index d8abc3a9c..08cc4e6f1 100644 --- a/apps/widmp/widget.js +++ b/apps/widmp/widget.js @@ -1,26 +1,51 @@ WIDGETS["widmoon"] = { area: "tr", width: 24, draw: function() { - const MC = 29.5305882, NM = 694039.09; - var r = 11, mx = this.x + 12; my = this.y + 12; + const CenterX = this.x + 12, CenterY = this.y + 12, Radius = 11; - function moonPhase(d) { - var tmp, month = d.getMonth(), year = d.getFullYear(), day = d.getDate(); + const simulate = false; // simulate one month in one minute + const updateR = 1000; // update every x ms in simulation + + function moonPhase() { + const d = Date(); + var month = d.getMonth(), year = d.getFullYear(), day = d.getDate(); + if (simulate) day = d.getSeconds() / 2 +1; if (month < 3) {year--; month += 12;} - tmp = ((365.25 * year + 30.6 * ++month + day - NM) / MC); - return Math.round(((tmp - (tmp | 0)) * 7)+1); + mproz = ((365.25 * year + 30.6 * ++month + day - 694039.09) / 29.5305882); + mproz = mproz - (mproz | 0); // strip integral digits, result is between 0 and <1 + if (simulate) console.log(mproz + " " + day); + return (mproz); } - const BLACK = g.theme.bg, MOON = 0x41f; - var moon = { - 0: () => { g.reset().setColor(BLACK).fillRect(mx - r, my - r, mx + r, my + r);}, - 1: () => { moon[0](); g.setColor(MOON).drawCircle(mx, my, r);}, - 2: () => { moon[3](); g.setColor(BLACK).fillEllipse(mx - r / 2, my - r, mx + r / 2, my + r);}, - 3: () => { moon[0](); g.setColor(MOON).fillCircle(mx, my, r).setColor(BLACK).fillRect(mx - r, my - r, mx, my + r);}, - 4: () => { moon[3](); g.setColor(MOON).fillEllipse(mx - r / 2, my - r, mx + r / 2, my + r);}, - 5: () => { moon[0](); g.setColor(MOON).fillCircle(mx, my, r);}, - 6: () => { moon[7](); g.setColor(MOON).fillEllipse(mx - r / 2, my - r, mx + r / 2, my + r);}, - 7: () => { moon[0](); g.setColor(MOON).fillCircle(mx, my, r).setColor(BLACK).fillRect(mx, my - r, mx + r, my + r);}, - 8: () => { moon[7](); g.setColor(BLACK).fillEllipse(mx - r / 2, my - r, mx + r / 2, my + r);} - }; - moon[moonPhase(Date())](); -} }; + // code source: github.com/rozek/banglejs-2-activities/blob/main/README.md#drawmoonphase + function drawMoonPhase (CenterX,CenterY, Radius, leftFactor,rightFactor) { + let x = Radius, y = 0, Error = Radius; + g.drawLine(CenterX-leftFactor*x,CenterY, CenterX+rightFactor*x,CenterY); + let dx,dy; + while (y <= x) { + dy = 1 + 2*y; y++; Error -= dy; + if (Error < 0) { + dx = 1 - 2*x; x--; Error -= dx; + } + g.drawLine(CenterX-leftFactor*x,CenterY-y, CenterX+rightFactor*x,CenterY-y); + g.drawLine(CenterX-leftFactor*x,CenterY+y, CenterX+rightFactor*x,CenterY+y); + g.drawLine(CenterX-leftFactor*y,CenterY-x, CenterX+rightFactor*y,CenterY-x); + g.drawLine(CenterX-leftFactor*y,CenterY+x, CenterX+rightFactor*y,CenterY+x); + } + } + function updateWidget() { + g.reset().setColor(g.theme.bg); + g.fillRect(CenterX - Radius, CenterY - Radius, CenterX + Radius, CenterY + Radius); + g.setColor(0x41f); + + mproz = moonPhase(); // mproz = 0..<1 + + leftFactor = mproz * 4 - 1; + rightFactor = (1 - mproz) * 4 - 1; + if (mproz >= 0.5) leftFactor = 1; else rightFactor = 1; + + drawMoonPhase(CenterX,CenterY, Radius, leftFactor,rightFactor); + + if (simulate) setTimeout(updateWidget, updateR); + } + updateWidget(); +} }; From a4b6bb26b25e3be1e156ceaf103f6f63812f64de Mon Sep 17 00:00:00 2001 From: Hilmar Strauch <56518493+HilmarSt@users.noreply.github.com> Date: Sat, 12 Feb 2022 13:21:22 +0100 Subject: [PATCH 5/7] Update mylocation.app.js two cities added --- apps/mylocation/mylocation.app.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/apps/mylocation/mylocation.app.js b/apps/mylocation/mylocation.app.js index fb2f73fa7..a2d39a8fd 100644 --- a/apps/mylocation/mylocation.app.js +++ b/apps/mylocation/mylocation.app.js @@ -9,32 +9,32 @@ let s = { 'lat': 51.5072, 'lon': 0.1276, 'location': "London" -} +}; function loadSettings() { settings = require('Storage').readJSON(SETTINGS_FILE, 1) || s; } function save() { - settings = s - require('Storage').write(SETTINGS_FILE, settings) + settings = s; + require('Storage').write(SETTINGS_FILE, settings); } -const locations = ["London", "Newcastle", "Edinburgh", "Paris", "New York", "Tokyo","???"]; -const lats = [51.5072 ,54.9783 ,55.9533 ,48.8566 ,40.7128 ,35.6762, 0.0]; -const lons = [-0.1276 ,-1.6178 ,-3.1883 ,2.3522 , -74.0060 ,139.6503, 0.0]; +const locations = ["London" ,"Newcastle","Edinburgh", "Paris" , "New York" , "Tokyo" , "Frankfurt", "Auckland", "???"]; +const lats = [ 51.5072 , 54.9783 , 55.9533 , 48.8566 , 40.7128 , 35.6762 , 50.1236 , -36.9 , 0.0 ]; +const lons = [ -0.1276 , -1.6178 , -3.1883 , 2.3522 , -74.0060 , 139.6503 , 8.6553 , 174.7832 , 0.0 ]; function setFromGPS() { Bangle.on('GPS', (gps) => { //console.log("."); if (gps.fix === 0) return; //console.log("fix from GPS"); - s = {'lat': gps.lat, 'lon': gps.lon, 'location': '???' } + s = {'lat': gps.lat, 'lon': gps.lon, 'location': '???' }; Bangle.buzz(1500); // buzz on first position Bangle.setGPSPower(0); save(); - Bangle.setUI("updown", ()=>{ load() }); + Bangle.setUI("updown", ()=>{ load(); }); E.showPrompt("Location has been saved from the GPS fix",{ title:"Location Saved", buttons : {"OK":1} @@ -49,13 +49,13 @@ function setFromGPS() { } function showMainMenu() { - console.log("showMainMenu"); + // console.log("showMainMenu"); const mainmenu = { '': { 'title': 'My Location' }, '{ load(); }, 'City': { value: 0 | locations.indexOf(s.location), - min: 0, max: 6, + min: 0, max: locations.length - 1, format: v => locations[v], onchange: v => { if (v != 6) { @@ -67,7 +67,7 @@ function showMainMenu() { } }, 'Set From GPS': ()=>{ setFromGPS(); } - } + }; return E.showMenu(mainmenu); } From 191c908a584c8eb9936c721e47e008f3e80a5abf Mon Sep 17 00:00:00 2001 From: Hilmar Strauch <56518493+HilmarSt@users.noreply.github.com> Date: Sat, 12 Feb 2022 13:29:05 +0100 Subject: [PATCH 6/7] Update metadata.json --- apps/widmp/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/widmp/metadata.json b/apps/widmp/metadata.json index f0d737c01..94f05a426 100644 --- a/apps/widmp/metadata.json +++ b/apps/widmp/metadata.json @@ -2,7 +2,7 @@ "id": "widmp", "name": "Moon Phase Widget", "version": "0.04", - "description": "Display the current moon phase in blueish for the northern hemisphere", + "description": "Display the current moon phase in blueish for both hemispheres. In the southern hemisphere the 'My Location' app is needed.", "icon": "widget.png", "type": "widget", "tags": "widget,tools", From 916e1410f800d63c86b8a445a90ef25bb3f16fe9 Mon Sep 17 00:00:00 2001 From: Hilmar Strauch <56518493+HilmarSt@users.noreply.github.com> Date: Sat, 12 Feb 2022 13:33:34 +0100 Subject: [PATCH 7/7] Update widget.js --- apps/widmp/widget.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/apps/widmp/widget.js b/apps/widmp/widget.js index 08cc4e6f1..6da572aab 100644 --- a/apps/widmp/widget.js +++ b/apps/widmp/widget.js @@ -1,5 +1,6 @@ WIDGETS["widmoon"] = { area: "tr", width: 24, draw: function() { const CenterX = this.x + 12, CenterY = this.y + 12, Radius = 11; + var southernHemisphere = false; // when in southern hemisphere, use the "My Location" App const simulate = false; // simulate one month in one minute const updateR = 1000; // update every x ms in simulation @@ -15,6 +16,12 @@ WIDGETS["widmoon"] = { area: "tr", width: 24, draw: function() { return (mproz); } + function loadLocation() { + // "mylocation.json" is created by the "My Location" app + location = require("Storage").readJSON("mylocation.json",1)||{"lat":50.1236,"lon":8.6553,"location":"Frankfurt"}; + if (location.lat < 0) southernHemisphere = true; + } + // code source: github.com/rozek/banglejs-2-activities/blob/main/README.md#drawmoonphase function drawMoonPhase (CenterX,CenterY, Radius, leftFactor,rightFactor) { let x = Radius, y = 0, Error = Radius; @@ -42,10 +49,15 @@ WIDGETS["widmoon"] = { area: "tr", width: 24, draw: function() { leftFactor = mproz * 4 - 1; rightFactor = (1 - mproz) * 4 - 1; if (mproz >= 0.5) leftFactor = 1; else rightFactor = 1; + if (true == southernHemisphere) { + var tmp=leftFactor; leftFactor=rightFactor; rightFactor=tmp; + } drawMoonPhase(CenterX,CenterY, Radius, leftFactor,rightFactor); if (simulate) setTimeout(updateWidget, updateR); } + + loadLocation(); updateWidget(); } };