Startseite bisherige Projekte Tools/Snippets Bücherempfehlungen Publikationen Impressum Datenschutzerklärung

Bangle.js 2 - Enigma

Oktober 2022


Könnte man das Enigma-Ziffernblatt der Pebble nicht auch für die Bangle nachbauen? Etwa so:


Ja, geht!


Graphics.prototype.setFontLECO1976Regular42 = function(scale) {
  // Actual height 34 (37 - 4)
  this.setFontCustom(
    E.toString(require('heatshrink').decompress(atob('ACkB/gFnADEEAol8AgcDFIk/AocB/4FDh4FE/4FDg4FEn4FB8AmBAgP+DYf/+AFEE4n4AonAAoZEEh4mBAobCiIIRZCAshTBZYQF2MtAAjO/53WF4QFmSqv8n5NDAsfgn+BAvCsBAswAjKYLRDApqb6WbL1DAsSzkFAOAAsoABn4F4Wf6zQx4vEAsPgn+BAvSVDAsSzmfcAFGWf6z8h4aEAsngAvT7XAqAApKdKDBn+BAvC5/WZ5TFAsKz/Wf4AJj/AgIpCAsYAQ'))),
    46,
    atob("DRQeGR4eHh4eHR4eDQ=="),
    48+(scale<<8)+(1<<16)
  );
  return this;
}


const h = g.getHeight();
const w = g.getWidth();

function draw() {

  let steps = Bangle.getHealthStatus("day").steps;

  // prepare Date
  let date = new Date();
  let minute = date.getMinutes();
  let hour = date.getHours();

  h1 = Math.floor(hour / 10);
  h2 = Math.floor(hour % 10);
  m1 = Math.floor(minute / 10);
  m2 = Math.floor(minute % 10);
  
  let month = date.getMonth()+1;
  let sm = (month > 9 ? "" : "0") + month;
  let day = date.getDate();
  let sd = (day > 9 ? "": "0") + day;

  g.reset();
  // background
  g.setColor(0,0,0);
  g.fillRect(0, 0, w, h);
  
  // red background
  g.setColor(1,0,0);
  g.fillRect(0, h/2-25, w, h/2+25);
  
  g.setColor(1,1,1);

  g.setFontLECO1976Regular42();
  g.setFontAlign(0, 0);
 
  // first line: date
  drawString(sd + sm, h/4 + 5);
  
  // Second line: clock
  drawString(h1+""+h2+""+m1+""+m2, h/2 + 10);
  
  // third line: Steps
  drawString(Math.floor(steps/1000)+""+Math.floor( (steps%1000)/100) +""+Math.floor( (steps%100)/10)+""+(steps%10), h/2+h/4 + 15);
  
  // Decoration
  g.setColor(0.5, 0.5, 0.5);
  drawString("9876", 0);
  drawString("1704", h + 20);
}

/*
 * Helper function for drawing in cols
 */
function drawString(text, h){
  const w4 = w/4;
  let x = w4/2;
  for (i=0; i < text.length && i < 4; i++){
    g.drawString(text.charAt(i), x, h-6);//offset for smaller font
    x += w4;
  }
}

Bangle.setUI("clock");
g.clear();
Bangle.loadWidgets();
for (let wd of WIDGETS) {
  wd.draw = () => {};
  wd.area = "";
}
// Redraw every 15s
setInterval(draw, 15000);
draw();


Eigentlich ganz einfach, wenn keine Animation dabei ist.


Die finalen Dateien:
enigma.app.js
enigma.info
enigma.img


Impressum - Datenschutzerklärung