add my cassioWatch clock face

pull/1918/head
Dione Batista 2022-06-05 11:05:40 -04:00 committed by GitHub
parent ac5c80ff38
commit e187843e60
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 218 additions and 0 deletions

View File

@ -0,0 +1,3 @@
1.0.0: Main App.
1.0.1: Performance Fixes.
1.0.2: Correct Screen Clear and Draw.

View File

@ -0,0 +1,10 @@
# cassioWatch
![Screenshot](screens/main.png)
Clock with Space Cassio Watch Style.
It displays current temperature,day,steps,battery.heartbeat and weather.
**To-do**:
Integrate heartbeat and Weather,Dinamic Day and Month Text by Clock Language or by an Options Page, and Align and change size of some elements.

183
apps/cassioWatch/app.js Normal file
View File

@ -0,0 +1,183 @@
require("Font6x12").add(Graphics);
require("Font8x12").add(Graphics);
require("Font7x11Numeric7Seg").add(Graphics);
let ClockInterval;
let RocketInterval;
let BatteryInterval;
function bigThenSmall(big, small, x, y) {
g.setFont("7x11Numeric7Seg", 2);
g.drawString(big, x, y);
x += g.stringWidth(big);
g.setFont("8x12");
g.drawString(small, x, y);
}
function ClearIntervals(inoreclock){
if (RocketInterval) clearInterval(RocketInterval);
if (BatteryInterval) clearInterval(BatteryInterval);
RocketInterval = undefined;
BatteryInterval = undefined;
if (inoreclock) return;
if (ClockInterval) clearInterval(ClockInterval);
ClockInterval = undefined;
}
let background = require("heatshrink").decompress(
atob(
"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"
)
);
let Rocket = {
1: require("heatshrink").decompress(
atob(
"qFGwkCkQAiiEBEkUgKQhPhE8ogCE8YhCiQoEE7pKEPIgncTQ4neEwpQCPoh1eJYYwCJ7QmHKAh1hZIpOjPAUBJ0ZQCTzEhExZ1lPAZ1kKDQmOJ65O2E65OPOy5O2E64mPOyxO/J2wnPJyx2QJ35O/J2khE0p2POq52PEy4nOiQnlOrEhiSfMJrEggQnLJzB1CPBQmZkInMEzBQDPBImbPBR1ZEoRMCZYImhgQgEE0BzFKAgmaDwLDFKAbqdYQwHBOrcgDgLBFJrsiiRNGYbpLBY4Ymhd4omkkUhE0pQEEwUBJjrHBd4QmCdzoiBDwYrCPLyZHF4QnagQeCE8UgJwYniJwgnIOzwfFO0wJCJzMQE4gyFEzR2FBQombkInDQI4AakAnBTYS+ZE5BMDE0LEES7YnLE0R3FAEQA="
)
),
2: require("heatshrink").decompress(
atob(
"qFGwkCkQAikMAgIliKYon/AA0gEAQniEwIhCAgYndEIjqBE8CaGKogmgKAp1fKAgncExBQBBQR1gKAp7BJ0IndExR4CE0idaOpYnbExqeYJxxPYEx0BJ0x2XExx2XJ20QE6xONJi5OPGwJOlBwLFkLoLFlBwJOkOwJOlE4JOkTjBOOE/52Pdi5OPEy7FnE5wmXE5xOZT5gmYEoMiiB1lgR4KTLAkDPBJ1WIAYDDKA4mWJwchDwYEDTjQiDJQh4GYLAhHFosSJy6OCTIxaEEywbBKYwjEEzMgUQxQFBogAURwZOGOjTKJdTYnOEryfHE0JQEfIpQgYQMAgJLeAgrtfTI4ndgSaFE4h0bdQkSZQpOfEAgIBO0AnEdrh2FJAb1EdbInEBIpObOwhOEEzYnFXzZ2HE4QlhE4QlDFMKcDYooniO0QnDT0YnCE0ciA"
)
),
3: require("heatshrink").decompress(
atob(
"qFGwkEogAjiMUEkVAKYgnhPYolgOQIniOYZ4FOcLqBE8CaGKojpgKAomhEYUQE7gmHKAIxCE0QkCPYR1gZIgnZExR4CJ0idmE7ZONYzImNgEUJ0p3YJRh2ZJJwnXOpQhBdkpaETsMEGQhOhE7jFLUYpOfTzgmKE4hOiE4hOigEUJ0rvCEywnPEqx2OTjBOOE7ImOTsqeZE5zFYoJOmT5kBJzEAih4LdK5mBAQInKOqoYDEgR4JEypHDEYbxJOq5ABdgZ7CEzZOEJQgnGihOYEIzJFTionCKYxWGEy9ADAYnGUIYmWog/EdBFAEy7KIKAwnjKwLqWE5pMeT48CVQpQfgMjKEtEiAnfEQJQCgJSCTcB6FJzkEdYcUE8FAdQghDOzonKTjh2EZAidcDoInHJzodBOwx/BE8JxcOwsAOwQmhJgSXDObwnFEwUUO0LFGE8aeiE4YmiokQE0tE"
)
),
4: require("heatshrink").decompress(
atob(
"qFGwkCkQAjiMSEkRTFE/4AGkMAgQCBE8MgEIYEDE7whDdQIngTQxVEE0ChFTjxQFE7jnFKAgxCOsBQFZgJ1gE7wmKPAROkTrTEHGAwnYiBHJFAaeXOoyXBEQZPac5AsFgJOhAoh2XJwwnFKoROdE4J9GJzwnIiQmVkInPAC0QE5AJFE64mHY5DFdE4SBEYr5JDJ0hKDJ0jCZJxoACgInmKLAmOTq5OOEy5OPTsxOYE5wmXO5wlYkAnMOqshiRNCgR4LOC8CkJCCEzxHDAgYnJOqpAEDoZ4HEyodDEQpQHdCsQOwwFHEyzoCPYzJGEy0gEwaZGA4acVEQSjHKAomXkQYEYAwlZeRKYDE8gjCYa7zJEwcCkImfKAb4FAD0hdTh4LgRSBOcR0CJz0gYYrrgN4QnEYrxOEE4bEeiAnGF4J2idL6VDE8ohBE0gnFE0J0BE4QGBiROgdIQABgJ2hJoTtjYgZSEE8ScgE4omikUQTcQADA="
)
),
5: require("heatshrink").decompress(
atob(
"qFGwkCkQAikMAgIliKYonhiAnjkEATIIniEwIhCAgYndEIhQFYUZVEE0BQFOr5QEeQQmiKAL1DOr5QEE7ROCDgZVEAoInZDwchFQQoDPAJOdEQYrBdrZFDOYwncEJDsDVIpOXgJxEE4pObEAgGFgJOaE48BaIhOZJ5ZObY5ROcE441CE6xOGPAwtCJzpGCJ0hHDkI1DJzwoEJzInLFg52dUo5O/J35OzE54mWOx4mXJxx1XE54mXkUhExkSJzCfMOrAlBPBiZXgQDBAQQmgJgh4JOqoYEFYwmaDoZzEFgh1YDgkiiAFEKAroXJJAGFiQmVkCNDTIz5EJy57HKAomXkQYEJoqaYeRadEJrAnJEQUAgJPiAoYmeT4cCkAnBE0BKCJkT1EkDCeJYYiDOkLDFFL5wBE4guCPDhEBEwQiDY70CkInDiQnCJzkhOwhKDdzp2Idb4nEE0B0Bdo4niE0J0CeYhOhgESUYYnidsgnEE0KeCE0gnDE0ciA"
)
),
6: require("heatshrink").decompress(
atob(
"qFGwkCkQA/ABEgKQZPhEwgABEsAoGJkBxBE8JKEAowAbJIhQEgLDiPooAdKA4ncTZAndSwhQEFoInaJQkSKAwlZdgwnfSgYADE4h1ZDwInlcggnIOzAdCE8i7EY5J3XDgYhGd4pOZEI52bSYwGCOAJ2bYIodEOzZOFFAjFcEwwAIE6xOHABBO/J34ndEyx2PJ00BJ00SJ0p1XE54mXOxxO/J5wmYgQnMOrB2BPBgkWiJ1CPBbBYAYR4KiTAXRwIrFTjgZDJYZ4IEyoiEIwrDcEJJQFOqwiBDARxFFwgmXkAYDEogsBF4QmXEQJ7GUYYkBEzDKJAgYmdEQbKFEzonEKYgngJwgmfZggmjKQghgiBRGkBzeTgUikJRgc47LDErTnDEAkQJzkCJwYnEJzonEJIaddOwhJEJzgdBE4hYEJzieJADgnEE0KUCXzoAGkJLEiB2hOgQDBT0TsDT0YmlE4YmjkQ="
)
),
7: require("heatshrink").decompress(
atob(
"qFGwkCkQAhkIpBiQlhkBSEJ8InlEIIoFE7whEE8pQFE7giBJQoneI4MCTYhQDE7YdCYYondEQYnEPwZ1bE5BQCJzonHkR2ZEAkBE4pNBE7zHFYrYhFUgonaXAQeEEwruZEYcgiROHJ7AfDAwxOeAAURiAmHE65HIOzwmOJ35OPE6xOPO35O/J35O/J1gnPEyx2PEy5OOOq5OnE5xOYO5omZgJQMJrQnLiQnagR4JOq5nCDgZ1fEYRLDE5DoZkUQNoZ4GOrJKGAoomXOw7lCAwYmYDgJSEAAUBA4QDBJzB6FOQrDXJwTJFdLjJKE9jDYZRAmkKAwmhKAgmiKAYmBkApdJIgjCKYIncOQYvJYTovGE84lagR2DE4xOakBOEgJXFOjYnEJAbtdOwggEkAmbDgInDE0B0BE4QgcE5AkiXYbpCOLonGYo4nhPMYnCUEgnBY0kiA=="
)
),
8: require("heatshrink").decompress(
atob(
"qFGwkCkQA/ABBSEJ8MgE4kBEsBPFE7xMCOIJ3hOYgFEE7rCGE70gE4pQBiAndYQwjBUohOZD4ZQFE7YkBE5AICYbZ2GE7sggJRCAA8iYzZOITroALE7EhExh4CAC0QExpPXOponZExx2XJ24nWdh52XdhzF/Yu5O/J35O0E55OXOx5O/J2omXE5x1XO54mYgQnMJrR4LOrciiAmiJgR4KEzIjDPBAlYiAiEeI51YkEBE4J5CD4KceTQQcBJgRQFdTZDCJIjDcNIqhGdTQmCkByFTTInDKgoAEE7ZEEJwhPdE1R1FE0InEE0R3DEwTGcDwomEE7hKFPYqafE8ROCE5DJbE5B/IEqh2ED4gnCJrMCJwgnEiB2bE4qeFEzUggQmIBQLEaEQImHLIImaE4YfcOw4lEFMLECS7onJO8wmkE4QljAAIA=="
)
),
};
let rocket_sequence = 1;
g.clear();
let DayMap = ["DOM","SEG", "TER", "QUA", "QUI", "SEX", "SAB"];
let MonthMap = [
"JAN",
"FEV",
"MAR",
"ABR",
"MAI",
"JUN",
"JUL",
"AUG",
"SET",
"OUT",
"NOV",
"DEZ",
];
let GetCurrentDay = (current_day) => {
if (current_day < 10) {
current_day = "0" + current_day;
}
return current_day;
};
function DrawClock() {
let d = new Date();
let h = d.getHours(),
m = d.getMinutes();
let time = h + ":" + ("0" + m).substr(-2);
g.setFont("7x11Numeric7Seg", 3);
g.drawString(time, 70, 60);
g.setFont("8x12", 2);
g.drawString(DayMap[d.getDay()], 20, 130);
g.setFont("8x12");
g.drawString(MonthMap[d.getMonth() - 1], 80, 126);
g.setFont("8x12", 2);
g.drawString(GetCurrentDay(d.getDate()), 78, 137);
}
function DrawBattery() {
bigThenSmall(E.getBattery(), "%", 135, 21);
}
function DrawRocket() {
g.clearRect(5, 62,63,115);
g.setColor(0, 255, 255);
g.drawRect(5, 62,63,115);
g.fillRect(5, 62,63,115);
g.drawImage(Rocket[rocket_sequence], 5, 65, { scale: 0.7 });
g.setColor(0, 0, 0);
rocket_sequence = rocket_sequence + 1;
if (rocket_sequence > 8) {
rocket_sequence = 1;
}
}
function DrawScene() {
g.reset();
g.clear();
g.setColor(0, 255, 255);
g.fillRect(0, 0, g.getWidth(), g.getHeight());
g.drawImage(background, 0, 0, { scale: 1 });
g.setColor(0, 0, 0);
g.setFont("6x12");
g.drawString("Launching Process", 30, 20);
g.setFont("8x12");
g.drawString("ACTIVATE", 40, 35);
g.setFont("8x12", 2);
g.drawString("30", 142, 132);
g.drawString("55", 95, 98);
g.setFont("8x12", 1);
g.drawString(Bangle.getStepCount(), 143, 104);
ClockInterval = setInterval(DrawClock, 30000);
DrawClock();
RocketInterval = setInterval(DrawRocket, 700);
DrawRocket();
BatteryInterval = setInterval(DrawBattery, 5 * 60000);
DrawBattery();
}
Bangle.on("lcdPower", (on) => {
if (!on) {
g.clear();
ClearIntervals(true);
}
});
Bangle.on("lock", (locked) => {
if (locked) {
ClearIntervals(true);
} else {
ClearIntervals();
DrawScene();
}
});
g.reset();
g.clear();
Bangle.setUI("clock");
Bangle.loadWidgets();
Bangle.drawWidgets();
DrawScene();
if (Bangle.isLocked()) {
ClearIntervals(true);
}

BIN
apps/cassioWatch/app.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

5
apps/cassioWatch/icon.js Normal file
View File

@ -0,0 +1,5 @@
require("heatshrink").decompress(
atob(
"lksxH+ACUPh80AQMQDKYANEoQAJmgoanQoLAAhdYFKAAEFNKJUFTAsRCwyxRQ6IUHsosBmc0nQAEmgsWN5QoFAAszCxE6FREQCQ8zEg1erwIGLCJUME4IABsgABAoRaMFRwpHr0zmQABmddFoosHmgqENA5VDKQVdlkyq2A1WkwFWlldxAsDLBirKJQUyleA6vV52AAAOr1YtBLIkIh7PELAiBJFQUsqvUAAWq0d/v9VwHPvQsFFYIsEFQU0QJCACFQXO5wCBF4fUv+p6osBsk6mggDFoZWOmdPEQIrDAAYuD6tWldVAAcrg6HCQgQnEAYT8BFYMr1InDFxAGB1VOvGczmdvOjzkrFYMQFYgkBQQUzrtkmasCKQoDFAoVVg8zh8IgHH44rCEYK2EQQuJmd/J47eDMQmqmc6YYJWCQYQAIFYczQQYBFEgWqWAeqVQN5QgNPhAqFcobnCWIMsp9ypwfBVIgFCE4d/qt5ud5zt4p8sDwJVJBQMJHwdzlQrEE4ooCFIIAClczZQL6CFREPg9y4Gdp8ynUyQYImCE4QmBFAd5qtVBQMysoqBbwIrJlec4MrhEQr1ellOJowDDFASyCFYLGBnIoH/wqBhNy5t5ldWqtPJooADA4InBRYnUqtXr0ymZaBFQorBAAMruWdVoIACFINOO4ImB0ZPCAAbkC0csryCBWA0QFYbaChEIlgABNgMzlfNExBXD5sqTAIrCQIs6FYIzDFoMQiwTBC4Nkq8qFgInBFAQCE5tOmdkCwKAFQQaEEGwgABmVdxBZB0YrCAAujlUzxBWJFZYsDLIVeldU0fNE4PN5ujqkrnIqDKw6CCFhMzFggABmcsqoADXwILCFRJWELBIsDFoRMBr1dmddMQYPDOpArFFhpbEAAYMEDQ5WGAAIREEYIECmggEABDWHFRIsFEwIUEFpQpJFRQABiAWJFwQAECJasHFiQAPFRoABI5q7DQCgAGQpb/JFShaOGxAqUWqYpYRJ8QFDiKHL4YZSA=="
)
);

View File

@ -0,0 +1,17 @@
{
"id": "cassioWatch",
"name": "Cassio Watch",
"description": "Clock with Space Cassio Watch Style",
"screenshots": [{ "url": "screens/screen1.png" }],
"icon": "app.png",
"version": "1.0.2",
"type": "clock",
"tags": "clock, weather, cassio, retro",
"supports": ["BANGLEJS2"],
"allow_emulator": true,
"readme": "README.md",
"storage": [
{ "name": "cassioWatch.app.js", "url": "app.js" },
{ "name": "cassioWatch.img", "url": "icon.js", "evaluate": true }
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB