Metainformationen zur Seite
  •  

LED-Matrix

Dieser Wikieintrag handelt von den selbstgebauten Matrizen, wie sie beispielsweise in diesem Artikel beschrieben werden.
Den Eintrag zu den erworbenen Matrizen vom Typ max7219 findet man hier.

Laufschrift

In diesem Beispiel, wie man eine Laufschrift auf eine LED-Matrix bekommen kann, bedienen wir uns dem Programm, welches sich hier finden lässt. Hierzu wird lediglich ein Arduino benötigt, da wir die Laufschrift auch direkt über die USB-Schnittstelle eines Computers auf den Arduino und damit auf die Matrix laden können.

Dieses Beispiel wird öfters auch bei Veranstaltungen, die sich um die Naturwissenschaften drehen, oder reine Infoveranstaltungen des öfteren präsentiert. Die zuständige Person kann Fragen, die beim Lesen nicht beantwortet werden, klären.

Code-Anpassungen

Der (je nach Wunsch) anzupassende Code ist:

const int zeilenstart=2; // Pin ab dem die Zeilen anfangen
const int spaltenstart=10; // Pin ab dem die Spalten anfangen
int x=0;
const int max_x=53;                         // auf Anzahl der Einträge von schrift setzen !!
int d=300; // Verzögerung (delay)
int xp=0;
int schrift[max_x]={                        // Zahlen durch gewünschte Einträge ersetzen !!
    79,73,73,121,0,127,65,65, //8
    65,0,127,8,8,127,0,127,   //16
    9,9,127,0,127,64,64,64,   //24
    0,127,8,20,34,65,0,127,   //32
    73,73,0,0,0,127,65,65,    //40
    127,0,15,8,127,           //45
    0,0,0,0,0,0,0,0,          //53  
    };
 
int pot[8]={1,2,4,8,16,32,64,128};
 
// --------------------------------------------------
void show_grid() {
    int cc=0;
    int s=0;
    int z=0;
    for (cc=0;cc<d;cc++) {
        for (s=0;s<8;s++) {
            xp=x+s;
            if (xp>=max_x) {xp-=max_x;}
            for (z=0;z<8;z++) {
                if ( (schrift[xp] & pot[z])==pot[z])
                    digitalWrite(zeilenstart+z,LOW);
                else
                    digitalWrite(zeilenstart+z,HIGH);
            }
            digitalWrite(spaltenstart+7-s,HIGH);
            digitalWrite(spaltenstart+7-s,LOW);
        }
    }
}
// --------------------------------------------------
void setup () {
    for (int i=0; i<8; i++) {
        pinMode(zeilenstart+i, OUTPUT); // Pins als Ausgang nutzen
        pinMode(spaltenstart+i, OUTPUT); // Pins als Ausgang nutzen
        digitalWrite(zeilenstart+i,HIGH);// Die Zeile ausschalten
        digitalWrite(spaltenstart+i,LOW);// Die Spalte ausschalten
    }
}
// --------------------------------------------------
void loop () {
    show_grid();
    x++;
    if (x==max_x) {x=0;}
} 

Das Array

 int schrift[max_x] 

ist so zu ändern, dass die gewünschten Zahlen (siehe unten) eingetragen werden und die Einträge des Arrays müssen gezählt und

 int max_x 

auf diesen gezählten Wert gesetzt werden.

Codieren des Musters

Der Code ist so geschrieben, dass die Spalten binär codiert sind. Die Matrix hat 8×8 Leds verbaut, also insgesamt 8 Punkte der Spalte die „AN“ oder „AUS“ sein können. Von oben nach unten werden diese LEDs gedanklich durchnummeriert von 0 bis 7. Das Muster der Spalte lässt sich dann ausdrücken als .

In Worten ausgedrückt man ordnet jeder LED die Zahl zu, die sie zur Summe beiträgt. Von oben nach unten ist dies:

für die erste LED

für die zweite LED

für die unterste LED

Wenn man die Spalte dann fertig hat, so addiert man die Zahlen der LEDs, die leuchten sollen und gibt die Summe für die Spalte in das Array von oben ein.

Wem das zu kompliziert vorkommt, dem hilft vielleicht folgendes Bild:

Beispielsweise wäre

int max_x = 8; 

und

int schrift[max_x]={
    0,34,66,64,64,70,38,0
};

Jedoch sollte man beachten, dass die Laufschrift (nach obigem Code) sich immer wiederholt. Daher kann es passieren, dass das Muster nicht mehr erkennbar wird, da das Ende mit dem Anfang verschmelzen kann. Ein Tipp um das zu umgehen wäre, am Anfang oder am Ende 8 (weil es 8 Spalten sind) Nullen in das Array schrift hinzuzufügen und dem entsprechend auch max_x zu ändern. Ebenso, könnte man sich in Kommentaren notieren, wie viele Zahlen man bereits eingetragen hat:

...
int max_x=16;
...
int schrift[max_x]={
    0,34,66,64,64,70,38,0   //8
    0,0,0,0,0,0,0,0         //16
};
...

So lässt sich schließlich eine beliebige 8×8 Laufschrift auf die LED-Matrix bringen.