User Tools

Site Tools


schuelerpraktikum:laufschrift:steuerboardersatz:arduinocode:ov-arduinocode

Der Arduino Laufschrift code

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
schuelerpraktikum/laufschrift/steuerboardersatz/arduinocode/ov-arduinocode.txt · Last modified: 2014/02/05 12:23 by carsten