www.mikrocontroller.net

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


Autor: Robin F. (gehacktes)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christoph H. (mc-entwickler)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Robin F. (gehacktes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ah okey danke :)

Autor: Robin F. (gehacktes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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
uint8_t bild1[7][5] = {
{ 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0},
{ 1, 0, 0, 0, 0},
};

uint8_t bild2[7][5] = {
{ 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0},
{ 1, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0},
};

uint8_t bild3[7][5] = {
{ 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0},
{ 1, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0},
};

uint8_t bild4[7][5] = {
{ 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0},
{ 1, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0},
};


void copy( uint8_t what[7][5] )
{
  memcpy( matrix, what, 7*5*sizeof(uint8_t) );
}

void display( uint8_t what[7][5] )
{
  uint8_t i;

  copy( what );
  for( i = 0; i < 200; ++i )
    showMatrix();
}

void loop()
{
  display( bild1 );
  display( bild2 );
  display( bild3 );
  display( bild4 );
  display( bild3 );
  display( bild2 );
}

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.

Autor: Robin F. (gehacktes)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.