HotSystems:
Du hast die Pins in deinem Sketch nicht als Output definiert.
Wo hast Du das gesehen?
In allen der zuletzt getesteten Sketches werden die Pins, an denen ein Transistor oder das „eine Ende“ der Arduino-R-LED-R-GND-Kette hängt, als Ausgänge konfiguriert. S. kpl. Sketch weiter unten.
HotSystems:
Allerdings würde ich die Matrix anders aufbauen:
Bei dir sehe ich eine evtl. Überlastung des Arduino Pin (x).
Den gemeinsamen + (x) durch einen PNP schalten und die Katode der Led an den Arduino Pin.
Nein, Pin x steht nur für einen von 7 Pins, die die Spalten oder Zeilen bedienen.
Was Überlastung angeht, mache ich mir keine Sorgen. An der LED fallen 1,7 V ab und 3,3V/180Ohm sind knapp über 22 mA. Das liegt zwar über den 20 mA, die ich mir immer als Grenze setze, aber da „damage“ erst ab 30 mA anfangen soll, bin ich mal nicht so streng 
Der vollständige Sketch, der das beschriebene Verhalten zeigt:
// Schonerlampe
// LED-Matrixmodul: TC12-11
#define DEBUG
#include <Piezo.h>
Piezo audio(A2);
// ---------------------------------------------------------------------
const char colPins[]={7, 8, 2, 3, 4, 5, 6};
const char rowPins[]={9, 10, 11, 12, 13, A0, A1};
const char displayWidth=sizeof(colPins)/sizeof(colPins[0]);
const char displayHeight=sizeof(rowPins)/sizeof(rowPins[0]);
const int rowOnTime=1000; // So lang ist eine Zeile eingeschaltet
// MILLISEKUNDEN
const char maxIntensity=7; // Hoechster Wert fuer die
// Helligkeit eines Pixels
const char buttonPin=A4; // Pin, an den der Knopf angeschlossen ist
const char potiPin=A3; // Pin, an dem das Poti haengt
byte refX=displayWidth/2; // (Start-) Koordinaten des Referenzpunktes
byte refY=displayHeight/2; //
byte refXMax=displayWidth; // und dessen Bewegungsbereich
byte refXMin=0; //
byte refYMax=displayHeight; //
byte refYMin=0; //
class Pixel
{
private:
char intensity; // Helligkeit d. Pixels
public:
Pixel() {intensity=0;}; // Konstruktor: Erzeugt ein Pixel
// mit Helligkeit 0
bool setIntensity(char); // Setzt Helligkeit
char getIntensity() { return intensity; }; // Holt Helligkeit
} matrix[7][7];
bool Pixel::setIntensity(char i_)
{
if(i_ <= maxIntensity)
{ intensity=i_; return true;}
else
{ return false; }
}
// displayMatrix() -----------------------------------------------------
void displayMatrix()
{
for(char i=0; i<=maxIntensity; i++)
{
for(char y=0; y<displayHeight; y++)
{
for(char x=0; x<displayWidth; x++)
{
if((matrix[x][y].getIntensity()>i))
{
digitalWrite(colPins[x], HIGH);
}
}
digitalWrite(rowPins[y], HIGH);
delay(rowOnTime);
digitalWrite(rowPins[y], LOW);
for(char x=0; x<displayWidth; x++)
{
digitalWrite(colPins[x], LOW);
}
}
}
}
// distanceToRef() -----------------------------------------------------
//
// Zu Testzwecken wird einfach ein Zufallswert zurueckgegeben
char distanceToRef(char x_, char y_, char refX_, char refY_)
{
char result=random(maxIntensity+1);
return(result);
}
// ---------------------------------------------------------------------
void setup()
{
#ifdef DEBUG
{
Serial.begin(9600);
}
#endif
for (char i=0; i<displayWidth; i++)
{
pinMode(colPins[i], OUTPUT);
}
for (char i=0; i<displayHeight; i++)
{
pinMode(rowPins[i], OUTPUT);
}
pinMode(buttonPin, INPUT_PULLUP);
matrix[0][0].setIntensity(1);
matrix[1][1].setIntensity(2);
matrix[2][2].setIntensity(3);
matrix[3][3].setIntensity(4);
matrix[4][4].setIntensity(5);
matrix[5][5].setIntensity(6);
matrix[6][6].setIntensity(7);
audio.beep(READY);
#ifdef DEBUG
Serial.println("---Programmstart---");
#endif
}
// ---------------------------------------------------------------------
void loop()
{
#ifdef DEBUG
Serial.print ("Button:");
Serial.print (digitalRead(buttonPin));
Serial.print (", Poti:");
Serial.println(analogRead(potiPin));
{
digitalWrite(8, HIGH); // Spalte 0
digitalWrite(9, HIGH); // Zeile 0
while(1) {}
}
#endif
if(digitalRead(buttonPin)==0)
{
audio.beep(ON);
while(digitalRead(buttonPin)==0) {}
audio.beep(OFF);
}
displayMatrix();
}
// eof
Gruß
Gregor