Zum Inhalt springen →

Espruino MAX7219 LED Matrix 8×8 Test

Dies ist mein erster Test mit dem MAX7219 Chip am Espruino Board. Das Board ist über die 3 Ausgänge B13 bis B15 angeschlossen und steuert eine 8×8 LED Matrix an. Die habe ich für ein paar Euro bei ebay bestellt.

Espruino MAX7219 LED 8x8 Matrix

Mit den folgenden Zeilen JavaScript Code kann man das Beispiel aus dem Video nachstellen. Viel Spaß beim basteln :-).

clearInterval();
clearTimeout();

digitalWrite (LED1,0);
digitalWrite (LED2,0);
digitalWrite (LED3,1);

SPI2.setup({mosi:B15, sck:B13});
var disp = require("MAX7219").connect(SPI2,B14);

var stage = 0;
var off = [0,0,0,0,0,0,0,0];
var all = [255,255,255,255,255,255,255,255];
var half1 = [255,0,255,0,255,0,255,0];
var half2 = [0,255,0,255,0,255,0,255];
var diagonale = [1,2,4,8,16,32,64,128];
var smiley = [60,66,153,165,129,165,66,60];
var invertsmiley = [195,189,102,90,126,90,189,195];
var heart = [0,54,127,127,127,62,28,8];

function counter () {
  digitalWrite (LED1, 1);
  clearInterval ();
  var a = new Array(0, 0, 0, 0, 0, 0, 0, 0);
  setInterval(function() {
    disp.raw([a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7]]);
    disp.intensity(1);

    a[0]+= 1;
    for (i = 0; i < 7; i++)
    {
      if (a[i] > 255)
      {
        a[i] = 0;
        a[i+1]+=1;
      }
    }
    if (a[7] > 255)
    {
      a = new Array(0, 0, 0, 0, 0, 0, 0, 0);
    }
  }, 5);
}

function showAll () {
  // Alle LEDs einschalten
  disp.raw(off);
  intensity = 0;
  diff = 0.1;
  setInterval(function() {
    disp.intensity(intensity);
    if (intensity > 1 || intensity < 0)
      diff = -diff;
    intensity += diff;
    disp.raw(all);
  }, 100);

}

function showSmiley () {
  // Smiley zeichnen
  disp.intensity(1);
  disp.raw(smiley);
}

function blinkHeart () {
  // Herz blinken lassen  
  intensity = 0;
  diff = 0.1;
  setInterval(function() {
    disp.intensity(intensity);
    if (intensity > 1 || intensity < 0)
      diff = -diff;
    intensity += diff;
    disp.raw(heart);
  }, 100);
}

function showDiagonale () {
  // Diaginale Linie
  disp.intensity(1);
  disp.raw(diagonale);
}

function blinkSmiley () {
    on = 1;
    inv = 1;
    disp.intensity(on);
    setInterval(function() {
      if (inv)
        disp.raw(smiley);
      else
        disp.raw(invertsmiley);
      inv =! inv;
    },500);
}

function run () {
  clearInterval();
  clearTimeout();
  disp = require("MAX7219").connect(SPI2,B14);
  disp.raw(off);
  switch (stage)
  {
    case 0:
      setTimeout(showAll, 100);
      break;
    case 1:
      showDiagonale ();
      break;
    case 2:
      setTimeout(showSmiley, 100);
      break;
    case 3:
      setTimeout(blinkSmiley, 100);
      break;
    case 4:
      setTimeout(blinkHeart, 100);
      break;
    case 5:
      setTimeout(counter,100);
      break;
    default:
      stage = -1;
  }
  stage ++;
}

setWatch(run, BTN1, {repeat:true,edge:"rising", debounce:1/*ms*/});

Veröffentlicht in Espruino