Forum: Mikrocontroller und Digitale Elektronik Verständnis Problem mit Arduino "C" Programm


von Robin F. (gehacktes)


Lesenswert?

Schönen guten Morgen,

ich habe in den letzten Tagen versucht mir eine LED-Matrix zu 
programmieren. Da ich leider noch nicht so fit bin habe ich erstmal 
geschaut wie man das Programm so schreibt. Da habe ich eins gefunden und 
dazu habe ich ein paar Fragen.

// definiere Zeilen und Spalten als Array vom Typ uint8_t
uint8_t rows[7] = {1, 2, 3, 4, 5, 6, 7};
uint8_t columns[5] = {8, 9, 10, 11, 12};
void setup() {
for (int i = 0; i < 7; i++) {
  pinMode(rows[i], OUTPUT);
}
for (int i = 0; i < 5; i++) {
  pinMode(columns[i], OUTPUT);
  }
}

void loop() {
  showMatrix();
}
// Definiere eine 7x5-Matrix. uint8_t ist eine vorzeichenlose 8-
// Bit-Integer-Variable. Setze das Muster so, dass eine Diagonale
// angezeigt wird.
uint8_t matrix[7][5] = {
{ 1, 0, 0, 0, 0},
{ 0, 1, 0, 0, 0},
{ 0, 1, 0, 0, 0},
{ 0, 0, 1, 0, 0},
{ 0, 0, 1, 0, 0},
{ 0, 0, 0, 1, 0},
{ 0, 0, 0, 0, 1},
};

void showMatrix() {
  // durchlaufe alle fünf Spalten
  for (int x = 0; x < 5; x++) {
    // setze vorherige Zeile auf 0
    // für jede Zeile setze den Wert der Matrix auf den
    //entsprechenden Pin
    for (int y = 0; y < 7; y++) {
  digitalWrite(rows[y], !matrix[y][x]);
    }
  // setze aktuelle Spalte auf 1
  digitalWrite(columns[x], 1);
  delay(1);
  // Lösche aktuelle Spalte
  digitalWrite(columns[x], 0);
}
}

mich würde interessieren was dieses "uint8_t" für ne Bedeutung hat?_? 
Eig ist es ja ne definietion, aber diesen Befehl kenn ich garnicht und 
finden tu ich den auch nicht. Und was ich auch noch gerne wisen würde, 
wie mich jetz nen 2. Buchstaben einfügen kann ( halt nen weiteres Bild ) 
und wie das dann z.B. zum Blinken gebracht werden kann?.^^ Hab schon ein 
wenig mit dem Programm gespielt, aber noch nicht weit gekommen.

Wäre nett wenn ihr mir Helfen könnt.

Gruss

von Christoph H. (mc-entwickler)


Lesenswert?

uint8_t ist ein Typdefinition.

Statt uint8_t könnte man auch "byte" schreiben.
Also

byte rows[7] = {1, 2, 3, 4, 5, 6, 7};

uint8_t ist aber wesentlich genauer definiert: die Abkürzung heißt

unsigned integer 8bit type

von Robin F. (gehacktes)


Lesenswert?

ah okey danke :)

von Robin F. (gehacktes)


Lesenswert?

Hallo,

wie muss ich das machen, wenn ich mehrere Buchstaben oder Zeichen 
anzeigen will? Iwie klappt das bei mir nicht?_?

von Karl H. (kbuchegg)


Lesenswert?

Du solltest sinnvollerweise das ganze Konzept ändern.

Die Anzeige der Matrix selber, also das was jetzt in showMatrix 
passiert, müsste man umbauen und die Anzeige selber in eine ISR 
verlagern.

Das ist die sinnvolle Variante.
Die pragmatische Variante ist es, einfach nacheinander das Array matrix 
mit jeweils einer anderen Belegung zu versehen und dann jedesmal 
showMatrix eine gewisse Anzahl mal aufzurufen und so eine Anzeigedauer 
zu erreichen. Danach dann den nächsten Buchstaben, etc.

in etwa so
1
uint8_t bild1[7][5] = {
2
{ 0, 0, 0, 0, 0},
3
{ 0, 0, 0, 0, 0},
4
{ 0, 0, 0, 0, 0},
5
{ 0, 0, 0, 0, 0},
6
{ 0, 0, 0, 0, 0},
7
{ 0, 0, 0, 0, 0},
8
{ 1, 0, 0, 0, 0},
9
};
10
11
uint8_t bild2[7][5] = {
12
{ 0, 0, 0, 0, 0},
13
{ 0, 0, 0, 0, 0},
14
{ 0, 0, 0, 0, 0},
15
{ 0, 0, 0, 0, 0},
16
{ 0, 0, 0, 0, 0},
17
{ 1, 0, 0, 0, 0},
18
{ 0, 0, 0, 0, 0},
19
};
20
21
uint8_t bild3[7][5] = {
22
{ 0, 0, 0, 0, 0},
23
{ 0, 0, 0, 0, 0},
24
{ 0, 0, 0, 0, 0},
25
{ 0, 0, 0, 0, 0},
26
{ 1, 0, 0, 0, 0},
27
{ 0, 0, 0, 0, 0},
28
{ 0, 0, 0, 0, 0},
29
};
30
31
uint8_t bild4[7][5] = {
32
{ 0, 0, 0, 0, 0},
33
{ 0, 0, 0, 0, 0},
34
{ 0, 0, 0, 0, 0},
35
{ 1, 0, 0, 0, 0},
36
{ 0, 0, 0, 0, 0},
37
{ 0, 0, 0, 0, 0},
38
{ 0, 0, 0, 0, 0},
39
};
40
41
42
void copy( uint8_t what[7][5] )
43
{
44
  memcpy( matrix, what, 7*5*sizeof(uint8_t) );
45
}
46
47
void display( uint8_t what[7][5] )
48
{
49
  uint8_t i;
50
51
  copy( what );
52
  for( i = 0; i < 200; ++i )
53
    showMatrix();
54
}
55
56
void loop()
57
{
58
  display( bild1 );
59
  display( bild2 );
60
  display( bild3 );
61
  display( bild4 );
62
  display( bild3 );
63
  display( bild2 );
64
}

Aber wie gesagt: Das ist im Grunde alles nicht tragfähig. Das ganze 
Konzept gehört geändert. Und das fängt schon mal damit an, dass das 
matrix Array so wie es jetzt ist, Schwachsinn ist.

von Robin F. (gehacktes)


Lesenswert?

Ah okey danke. Ja wie gesagt ich bin in der ganzen Geschichte noch net 
so fit. Das hab ich auch net selber geschrieben, sondern als beispiel 
genommen, um das ganze erst einmal zu verstehen, wie man dort ne Matrix 
ansteuert.

Gruss

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.