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:
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.