// LED Array
int ledArrayYRow[] = {22, 23, 24, 25, 26, 27, 28, 29}; // Kathode(-)LED
int ledArrayXCol[] = {37, 36, 35, 34, 33, 32, 31, 30}; // Anode(+)LED
int intDelayAn = 100;
int intDelayAus = 50;
void setup() {
// LEDArray Ports als Ausgänge setzen
for(int i=0;i<=7;i++){
pinMode(ledArrayXCol[i], OUTPUT);
pinMode(ledArrayYRow[i], OUTPUT);
}
}
void loop() {
// Gezielt LED steuern
switchLED(0, 0);
switchLED(0, 7);
switchLED(7, 7);
switchLED(7, 0);
// Spalte für Spalte schalten
SetCol4Col();
// Zeile für Zeile schalten
SetRow4Row();
// Lauflicht Spalte für Spalte
LaufLEDCol();
// Lauflicht Zeile für Zeile
LaufLEDRow();
}
// Funktionen
void SetAllOutputs2Low(){
// Setze alle Ausgänge auf LOW
for(int i = 0; i<=7; i++){
digitalWrite(ledArrayXCol[i], LOW);
}
for(int i = 0; i<=7; i++){
digitalWrite(ledArrayYRow[i], LOW);
}
}
void SetAllOutputs2High(){
// Setze alle Ausgänge auf HIGH damit alle LED "gesperrt" werden
for(int i = 0; i<=7; i++){
digitalWrite(ledArrayYRow[i], HIGH);
}
for(int i = 0; i<=7; i++){
digitalWrite(ledArrayXCol[i], HIGH);
}
}
void loescheMatrix(){
// Alle Ausgänge aug die LED-Anoden auf LOW setzen und mit Sperren der Kathoden mit HIGH
for(int i = 0; i<=7; i++){
digitalWrite(ledArrayXCol[i], LOW);
}
for(int i = 0; i<=7; i++){
digitalWrite(ledArrayYRow[i], HIGH);
}
}
void SetCol4Col(){
SetAllOutputs2Low();
// Da nun alle LED-Kathoden/Zeilen gegen Gnd gezogen sind, leuchten alle LED's wenn die Spalte auf HIGH geht.
// Schalte Spalte nach Spalte
for(int i=0;i<=7;i++){
digitalWrite(ledArrayXCol[i], HIGH);
delay(200);
digitalWrite(ledArrayXCol[i], LOW);
delay(50);
}
}
void SetRow4Row(){
SetAllOutputs2High();
// Schalte Zeile nach Zeile
for(int i=0;i<=7;i++){
digitalWrite(ledArrayYRow[i], LOW);
delay(200);
digitalWrite(ledArrayYRow[i], HIGH);
delay(50);
}
}
void LaufLEDCol(){
loescheMatrix();
for(int row=0; row<=7; row++){
for(int col=0; col<=7; col++){
digitalWrite(ledArrayXCol[row], HIGH);
digitalWrite(ledArrayYRow[col], LOW);
delay(intDelayAn);
digitalWrite(ledArrayXCol[row], LOW);
digitalWrite(ledArrayYRow[col], HIGH);
delay(intDelayAus);
}
}
}
void LaufLEDRow(){
for(int col=0; col<=7; col++){
for(int row=0; row<=7; row++){
digitalWrite(ledArrayXCol[row], HIGH);
digitalWrite(ledArrayYRow[col], LOW);
delay(intDelayAn);
loescheMatrix();
delay(intDelayAus);
}
}
}
void switchLED(int Zeile, int Spalte){
loescheMatrix();
//Versetze entsprechende LED-Spalte mit 5V HIGH und ziehe entsprechende LED-Kathode auf GND (LOW)
digitalWrite(ledArrayYRow[Spalte], LOW);
digitalWrite(ledArrayXCol[Zeile], HIGH);
delay(intDelayAn * 10);
}