Metainformationen zur Seite
  •  

Dies ist eine alte Version des Dokuments!


LED-Matrix

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: <codecpp> 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;} } </code> Das Array <codec> int schrift[max_x] </code> ist so zu ändern, dass die gewünschten Zahlen (siehe unten) eingetragen werden und letztendlich die Einträge des Arrays gezählt werden und <codec> int max_x </code> auf diesen Wert gesetzt wird. === Codieren des Musters === Der Code ist so geschrieben, dass sich die Spalten binär codiert sind. Die Matrix hat 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 <latex>$\sum_{n=0 \ und \ n\ leuchtet}^{7}2^n</latex>. In Worten ausgedrückt man Ordnet jeder LED die Zahl zu, die sie zur Summe beiträgt. Von oben nach unten ist dies: <latex>2^0 =1</latex> für die erste LED <latex>2^1 =2</latex> für die zweite LED … <latex>2^7 =128</latex> für die unterste LED Wenn man seine Zeile 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 <codec>int max_x = 8; </code> und <codec>int schrift[max_x]={ 0,34,66,64,64,70,38,0 };</code> 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 entsprechen auch max_x zu ändern. Ebenso, könnte man sich in Kommentaren notieren, wie viele Zahlen man bereits eingetragen hat: <codec> 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

}; </code>

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