Einsteiger mit vielen Fragezeichen braucht "kleine" Lehrstunde

Hallo Leute,

endlich ist mein Starter-Kit angekommen und als gestern mein Sohn gesehen hat das da ein 8x8 LED-Modul bei ist, hat er mir ein Video bei Youtube gezeigt und gefragt ob ich das nachmachen könnte. Ich habe mir den Sketch kopiert und es hat funktioniert.

Aber als ich den Code mir genauer angeschaut habe, kamen bei mir viele Fragezeichen :confused:

Ich weiß es ist viel verlangt, aber vielleicht kann mir der eine oder andere ein bischen erklären für was die ganzen einzelnen Funktionen stehen. Ich muß dazu sagen, daß ich in C/C++ ein absoluter Neuling bin.

// 2-dimensional array of row pin numbers:
const int row[8] = {
  2, 7, 19, 5, 13, 18, 12, 16
};

// 2-dimensional array of column pin numbers:
const int col[8] = {
  6, 11, 10, 3, 17, 4, 8, 9
};

// 2-dimensional array of pixels:
int pixels[8][8];

int count = 1000;

char str[] = "FABCDEDCBA";
int strLen = sizeof(str);
int ptrChar = 0;


typedef bool charMapType[8][8];

const charMapType charBlank = {
  {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, 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, 0, 0, 0, 0}
};

const charMapType heart0 = {
  {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, 0, 0},
  {0, 0, 0, 1, 1, 0, 0, 0},
  {0, 0, 0, 1, 1, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0}
};

const charMapType heart1 = {
  {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, 1, 0, 0, 0},
  {0, 0, 1, 1, 1, 1, 0, 0},
  {0, 0, 1, 1, 1, 1, 0, 0},
  {0, 0, 0, 1, 1, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0}
};

const charMapType heart2 = {
  {0, 0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0},
  {0, 1, 1, 0, 0, 1, 1, 0},
  {1, 1, 1, 1, 1, 1, 1, 1},
  {1, 1, 1, 1, 1, 1, 1, 1},
  {0, 1, 1, 1, 1, 1, 1, 0},
  {0, 0, 1, 1, 1, 1, 0, 0},
  {0, 0, 0, 1, 1, 0, 0, 0}
};

const charMapType heart3 = {
  {0, 0, 0, 0, 0, 0, 0, 0},
  {0, 1, 1, 0, 0, 1, 1, 0},
  {1, 1, 1, 1, 1, 1, 1, 1},
  {1, 1, 1, 1, 1, 1, 1, 1},
  {0, 1, 1, 1, 1, 1, 1, 0},
  {0, 0, 1, 1, 1, 1, 0, 0},
  {0, 0, 0, 1, 1, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0}
};

const charMapType heart4 = {
  {0, 1, 1, 0, 0, 1, 1, 0},
  {1, 1, 1, 1, 1, 1, 1, 1},
  {1, 1, 1, 1, 1, 1, 1, 1},
  {0, 1, 1, 1, 1, 1, 1, 0},
  {0, 0, 1, 1, 1, 1, 0, 0},
  {0, 0, 0, 1, 1, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0}
};

const charMapType *charMap[6] = {&heart0, &heart1, &heart2, &heart3, &heart4, &charBlank};

void setup() {
  // initialize the I/O pins as outputs
  // iterate over the pins:
  for (int thisPin = 0; thisPin < 8; thisPin++) {
    // initialize the output pins:
    pinMode(col[thisPin], OUTPUT);
    pinMode(row[thisPin], OUTPUT);
    // take the col pins (i.e. the cathodes) high to ensure that
    // the LEDS are off:
    digitalWrite(col[thisPin], HIGH);
  }

  //setupScreen();
  setupChar();

}

void loop() {

  // draw the screen:
  refreshScreen();
  
  if(count-- == 0){
    count = 1000;
    setupChar();
  }

}

void setupChar(){
  char c = str[ptrChar];
  int offset = c - 'A';
  
  const charMapType *cMap = charMap[offset];
  //charMapType *cMap = &charDummy;
  
  for (int x = 0; x < 8; x++) {
    for (int y = 0; y < 8; y++) {
      bool v = (*cMap)[x][y];
      
      if(v){
        pixels[x][y] = LOW;
      }else{
        pixels[x][y] = HIGH;
      }
    }
  }
  
  ptrChar++;
  if(ptrChar>=strLen-1){
    ptrChar = 0;
  }

}

void refreshScreen() {
  // iterate over the rows (anodes):
  for (int thisRow = 0; thisRow < 8; thisRow++) {
    // take the row pin (anode) high:
    digitalWrite(row[thisRow], HIGH);
    // iterate over the cols (cathodes):
    for (int thisCol = 0; thisCol < 8; thisCol++) {
      // get the state of the current pixel;
      int thisPixel = pixels[thisRow][thisCol];
      // when the row is HIGH and the col is LOW,
      // the LED where they meet turns on:
      digitalWrite(col[thisCol], thisPixel);
      // turn the pixel off:
      if (thisPixel == LOW) {
        digitalWrite(col[thisCol], HIGH);
      }
    }
    // take the row pin low to turn off the whole row:
    digitalWrite(row[thisRow], LOW);
  }
}

Was mir Kopfschmerzen bereitet ist der Bereich vor und nach void Setup()

Danke Torsten

Das Programm beschäftigt sich viel mit Arrays und Pointer
Lesestoff: http://www.cplusplus.com/doc/tutorial/

Danke combie,

werde ich mir dann mal in ruhe durchlesen. Wenn noch fragen kommen, hoffe ich sie hier stellen zu dürfen.

TorstenUE:
Danke combie,

werde ich mir dann mal in ruhe durchlesen. Wenn noch fragen kommen, hoffe ich sie hier stellen zu dürfen.

Klar, doch!
(denke ich mal)

Aber wäre schon schön, wenn deine Frage dann etwas konkreter wäre....

combie:
Klar, doch!
(denke ich mal)

Aber wäre schon schön, wenn deine Frage dann etwas konkreter wäre....

Mir raucht schon der Kopf :confused:

Da ich mit meinem alten Schulenglisch schon große probleme habe, ist diese kost doch ziemlich schwer.

Wie eingangs schon erwähnt ist C/C++ absolut neu für mich. Was ich vorher schon verstanden hatte ist, dass ich mit int Variablen deklariere.

Also fange ich mit der ersten Frage an:

Was genau passiert hier:

char str[] = "FABCDEDCBA";
int strLen = sizeof(str);

was genau bedeuten die beiden Zeilen?

Ist die erste Zeile ein Array das str heißt? Was bedeutet dann char? Und die Buchstaben dahinter?
Was bedeutet das in der 2. Zeile hinter dem = ?

Es gibt noch so viele Fragen :frowning:

Hallo,

ein netter Mensch hat alles ins deutsche übersetzt.
Das .pdf File. ArduinoForum.de - Das deutschsprachige Forum rund um den Arduino - Arduino Code-Referenz (deutsch)

TorstenUE:
Da ich mit meinem alten Schulenglisch schon große probleme habe, ist diese kost doch ziemlich schwer.

Möglicherweise magst Du dann C von A bis Z von Jürgen Wolf, da schaue ich nach.

TorstenUE:

char str[] = "FABCDEDCBA";

int strLen = sizeof(str);




was genau bedeuten die beiden Zeilen?

Ist die erste Zeile ein Array das **str** heißt?

Ja.

TorstenUE:
Was bedeutet dann char?

Variablentyp "Zeichen", so wie int, byte, bool ... Reference Data Types

TorstenUE:
Und die Buchstaben dahinter?

"F" entspricht dem Zeichen charBlank in der Fontdefinition, "A" demzufolge dem nächsten, also heart0.

TorstenUE:
Was bedeutet das in der 2. Zeile hinter dem = ?

Da wird die Länge des Feldes ermittelt und in eine Variable geschrieben.

Es ist ein wenig so, als ob man versucht mit A1-Sprachkenntnissen (Elementare
Sprachverwendung - Beginner) einen Zeitungsartikel in dieser Sprache zu einem komplexen politischen Thema zu lesen. Es wird (zur Zeit) noch ziemlich schwierig sein, den zu verstehen. :slight_smile:
Ich wünsche aber viel Erfolg!

Doc_Arduino:
Hallo,

ein netter Mensch hat alles ins deutsche übersetzt.
Das .pdf File. ArduinoForum.de - Das deutschsprachige Forum rund um den Arduino - Arduino Code-Referenz (deutsch)

agmue:
Möglicherweise magst Du dann C von A bis Z von Jürgen Wolf, da schaue ich nach.

Danke euch beiden, werde ich mir die Tage mal zu gemüte führen.

TorstenUE:
Danke euch beiden, werde ich mir die Tage mal zu gemüte führen.

Wegen der Zeiger dürfte aus der "kleinen" Lehrstunde schnell eine große werden. Sollte ein Knoten im Kopf drohen, hätte ich eine gedankliche Lockerungsübung: Ändere das Programm, so daß nicht das "F" sondern "@" das Leerzeichen anzeigt.

Wenn Du das schaffst, kannst Du mit dem Programm "spielen", also beispielsweise eigene Zeichen entwerfen. Spaß soll es ja auch machen und Ergebnisse zeigen, bevor Dein Sohn selbst Kinder hat.

Ich kann gut damit leben, mit dem Auto zu fahren, ohne alle Details zu verstehen :slight_smile: