Im Folgenden ist ein lauffähig getesteter Arduinokode aufgelistet. Im Kode gibt es die Variable j, die die Werte von 0-15 durchläuft, gebraucht zur Anwahl der aktiven Spalten. Weiter die Variable “Versatz”, die die aktuelle Verschiebung des Laufschrifttextes definiert. Weiter ist zu sagen, dass die defiierten Texte zweimal hintereinader gelegt sind, so dass beim shiften des Anzeigeausschnittes sich am Ende des Textes der Anfang wieder glatt anfügt:
1) Orginal Arduino-Datei: Laufschrift mit Text
(Datei muss nach download umbenannt werden, da Arduinodateien mit Endung “.ino” so auf dem Wiki nicht hinterlegt werden können. Daher: Diese Datei umbennen und Endung “.TXT” dabei entfernen.
2) Kode als pdf mit korrekter Befehlscode Einfärbung: Laufschrift mit Text.pdf
Anzeige im pdf drehen.
3) Kode im Wiki-Listing:
/* Ansteuerprogramm für drei Punktmatrixelemente Hier werden die 15 Spalten sequentiell aktiviert (gegen Erde durchgeschaltet), während die sieben Zeilen jeweils pro Spalte mit einem Byte beschickt werden. Die Wiederholfrequenz ist dann so schnell, dass das Auge die sequentielle Aktivierung der LEDs nicht wahr nimmt. */ // Definert Pis für Zeilenansteuerung: int Zeile[] = {29, 43, 41, 39, 37, 35, 33, 31}; // Stecher | - Z1 Z2 Z3 Z4 Z5 Z6 Z7 Z8 | // Stecker | S0 S1 S2 S3 - - - - - | int Spalte[] = {44, 42, 40, 38}; // 4-Bitbus: Definiert Pins für sequentielle Spaltenansteuerung int Eins = 0; // Spaltenbusinitialisierung int Zwei = 0; int Vier = 0; int Acht = 0; int Wiederholung = 0; // Wiederholungen des Anzeigeinhalts vor Zeilenverschiebung. int Versatz = 0; // Versatz des Textes beim Rollen int Sversatz =0; // Spalte mit Versatz int Textspalten = 0; // Anzahl der Zeichen long t0 = 0; int Text[] = { 124, 18, 17, 18, 124, 0, 124, 8, 4, 120, 0, 124, 8, 4, 120, 0, 0, 58, 64, 0, 0, 0, 0, 0, 0, 124, 18, 17, 18, 124, 0, 124, 8, 4, 120, 0, 124 // int Text[] = { 4, 2, 126, 2, 2, 0, 58, 64, 0, 120, 4, 120, 4, 120, 0, 0, 0, 0, 0, 0}; // Text Tim //int Text[] = { 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // Text | // int Text[] = { 32, 64, 64, 63, 0, 62, 64, 64, 62, 0, 76, 74, 74, 50, 0, 0, 2, 63, 66, 0, 0, 0, 58, 64, 0, 0, 120, 4, 4, 120, 0, 0, 0, 0, 0, 32, 64, 64, 6 // the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(Zeile[1], OUTPUT); pinMode(Zeile[2], OUTPUT); pinMode(Zeile[3], OUTPUT); pinMode(Zeile[4], OUTPUT); pinMode(Zeile[5], OUTPUT); pinMode(Zeile[6], OUTPUT); pinMode(Zeile[7], OUTPUT); pinMode(Spalte[3], OUTPUT); pinMode(Spalte[2], OUTPUT); pinMode(Spalte[1], OUTPUT); pinMode(Spalte[0], OUTPUT); Textspalten = sizeof(Text)/2; // Der Text ist zwecks Rollens doppel hintereinander } // Ende Steup // the loop routine runs over and over again forever: void loop() { do // Schleife Wiederholungen { for (int j=0; j<15;++j) // aktiviert sequentiell Spalten { Sversatz = (j+Versatz)%Textspalten; // Versatz ist die aktuelle Verschiebung des Textes (am Ende incrementiert) bis "Textspalten" // Setzt in den Zeilen Anzeigebytes if (Text[Sversatz] & 1) digitalWrite(Zeile[1], HIGH); else digitalWrite(Zeile[1], LOW); if (Text[Sversatz] & 2) digitalWrite(Zeile[2], HIGH); else digitalWrite(Zeile[2], LOW); if (Text[Sversatz] & 4) digitalWrite(Zeile[3], HIGH); else digitalWrite(Zeile[3], LOW); if (Text[Sversatz] & 8) digitalWrite(Zeile[4], HIGH); else digitalWrite(Zeile[4], LOW); if (Text[Sversatz] & 16) digitalWrite(Zeile[5], HIGH); else digitalWrite(Zeile[5], LOW); if (Text[Sversatz] & 32) digitalWrite(Zeile[6], HIGH); else digitalWrite(Zeile[6], LOW); if (Text[Sversatz] & 64) digitalWrite(Zeile[7], HIGH); else digitalWrite(Zeile[7], LOW); // Dekodierung der integer Laufvariable in 4-Bitansteuerbus: Eins = j & 1; / / immer noch integer Zwei = (j & 2); Vier = (j & 4); Acht = (j & 8); if (Acht == 8) digitalWrite(Spalte[3], HIGH); else digitalWrite(Spalte[3], LOW); if (Vier == 4) digitalWrite(Spalte[2], HIGH); else digitalWrite(Spalte[2], LOW); if (Zwei == 2) digitalWrite(Spalte[1], HIGH); else digitalWrite(Spalte[1], LOW); if (Eins == 1) digitalWrite(Spalte[0], HIGH); else digitalWrite(Spalte[0], LOW); t0 = micros(); do {} while ((micros()-t0)<1000); ++Wiederholung; } // Ende for Schleife für Spaltenansteuerung } // Ende while while (Wiederholung <256); // Grenze Wiederholung Wiederholung = 0; if (Versatz < Textspalten) ++Versatz; else Versatz = 0; } // Ende Loop