Hallo !
Ich habe gestern ein 4x4 Matrix selbstgebaut. Nun geht es an den Code. Nur ich hab da so meine probleme mit dem Multiplexing. Da ich dabei nicht wirklich weitergekommen bin, habe ich mal ein bischen in dem Arduino Playground geguckt. Und schwubs hab ich etwas gefunden
http://arduino.cc/playground/Main/DirectDriveLEDMatrix
Da ich kein 8x8 Matrix habe sondern ein 4x4 hab ich versucht den Code für das kleiner Matrix umzuschreiben. Hier ist mein bearbeiteter Code:
#include <FrequencyTimer2.h>
#define SPACE { \
  {0, 1, 0, 0}, \
  {0, 1, 0, 0}, \
  {0, 1, 0, 0}, \
  {0, 1, 0, 0} \
}
#define H { \
  {1, 0, 0, 0}, \
  {0, 1, 0, 0}, \
  {0, 0, 1, 0}, \
  {0, 0, 0, 1} \
}
#define EÂ { \
  {1, 1, 1, 1}, \
  {0, 0, 0, 0}, \
  {0, 0, 0, 0}, \
  {0, 0, 0, 0} \
}
#define L { \
  {0, 0, 0, 0}, \
  {0, 0, 0, 0}, \
  {0, 0, 0, 0}, \
  {1, 1, 1, 1} \
}
#define O { \
  {1, 0, 1, 0}, \
  {0, 0, 0, 0}, \
  {1, 0, 1, 0}, \
  {0, 0, 0, 0} \
}
byte col = 0;
byte leds[4][4];
// pin[xx] on led matrix connected to nn on Arduino (-1 is dummy to make array start at pos 1)
int pins[9]= {-1, 4, 5, 6, 7, 8, 9, 10, 11};
// col[xx] of leds = pin yy on led matrix
int cols[4] = {pins[7], pins[6], pins[5], pins[4]};
// row[xx] of leds = pin yy on led matrix
int rows[4] = {pins[11], pins[10], pins[9], pins[8]};
const int numPatterns = 6;
byte patterns[numPatterns][4][4] = {
 H,E,L,L,O,SPACE
};
int pattern = 0;
void setup() {
 // sets the pins as output
 for (int i = 1; i <= 8; i++) {
  pinMode(pins[i], OUTPUT);
 }
 // set up cols and rows
 for (int i = 1; i <= 4; i++) {
  digitalWrite(cols[i - 1], LOW);
 }
 for (int i = 1; i <= 4; i++) {
  digitalWrite(rows[i - 1], LOW);
 }
 clearLeds();
 // Turn off toggling of pin 11
 FrequencyTimer2::disable();
 // Set refresh rate (interrupt timeout period)
 FrequencyTimer2::setPeriod(2000);
 // Set interrupt routine to be called
 FrequencyTimer2::setOnOverflow(display);
 setPattern(pattern);
}
void loop() {
  pattern = ++pattern % numPatterns;
  slidePattern(pattern, 60);
}
void clearLeds() {
 // Clear display array
 for (int i = 0; i < 4; i++) {
  for (int j = 0; j < 4; j++) {
   leds[i][j] = 0;
  }
 }
}
void setPattern(int pattern) {
 for (int i = 0; i < 4; i++) {
  for (int j = 0; j < 4; j++) {
   leds[i][j] = patterns[pattern][i][j];
  }
 }
}
void slidePattern(int pattern, int del) {
 for (int l = 0; l < 4; l++) {
  for (int i = 0; i < 3; i++) {
   for (int j = 0; j < 4; j++) {
    leds[j][i] = leds[j][i+1];
   }
  }
  for (int j = 0; j < 4; j++) {
   leds[j][3] = patterns[pattern][j][0 + l];
  }
  delay(del);
 }
}
// Interrupt routine
void display() {
 digitalWrite(cols[col], LOW); // Turn whole previous column off
 col++;
 if (col == 4) {
  col = 0;
 }
 for (int row = 0; row < 4; row++) {
  if (leds[col][3 - row] == 1) {
   digitalWrite(rows[row], LOW); // Turn on this led
  }
  else {
   digitalWrite(rows[row], HIGH); // Turn off this led
  }
 }
 digitalWrite(cols[col], HIGH); // Turn whole column on at once (for equal lighting times)
}
Ich hoffe das mir jemand mit meinem Problem weiterhelfen kann !
Schon mal danke im vorraus !!!
wer noch einen schaltplan von dem Matrix benötigt kann hier mal vorbeischauen: http://minipenguin.com/?cat=14
(den Code, den man unten auf der seite findet, funktioniert leider nicht bei mir, deswegen versuch ich auch
mit dem obigen code weiterzukommen ! Vielleicht könnte mir ja auch die fehler des codes auf der seite sagen)