Sketch vereinfachen

Hallo zusammen!

Ich habe mir eine kleine 3x3 LED Matrix aufgebaut um den Einstieg in die Programmierung einer Matrix erstmal "Einfach" zu halten. Als Controller verwende ich den Arduino Pro Mini 5V.
Ich habe dafür grade dann auch meinen ersten Sketch geschrieben. Dieser gestaltet sich aber als ehr umständlich.
Gibt es eine Möglichkeit diesen zu vereinfachen? Zum Beispiel durch eine Lybrary?
Da ich Neuling bin würde ich mich über eure Hilfe sehr freuen!

Liebe Grüße
Lutz

int A = 7;                        //PLUS Reihe UNTEN
int B = 8;                        //PLUS Reihe MITTE
int C = 9;                        //PLUS Reihe Oben
int D = 10;                       //MINUS Spalte Rechts
int E = 11;                       //MINUS Spalte Mitte
int F = 12;                       //MINUS Spalte Links

int g = 200;                      //Variable für Geschwindigkeit

void setup ()
{
  pinMode (A, OUTPUT);
  pinMode (B, OUTPUT);
  pinMode (C, OUTPUT);
  pinMode (D, OUTPUT);
  pinMode (E, OUTPUT);
  pinMode (F, OUTPUT);

}

void loop ()
{
  digitalWrite(A, LOW);
  digitalWrite(B, LOW);
  digitalWrite(C, HIGH);
  digitalWrite(D, HIGH);
  digitalWrite(E, HIGH);
  digitalWrite(F, LOW);
  delay(g);
  digitalWrite(A, LOW);
  digitalWrite(B, LOW);
  digitalWrite(C, HIGH);
  digitalWrite(D, HIGH);
  digitalWrite(E, LOW);
  digitalWrite(F, HIGH);
  delay(g);
  digitalWrite(A, LOW);
  digitalWrite(B, LOW);
  digitalWrite(C, HIGH);
  digitalWrite(D, LOW);
  digitalWrite(E, HIGH);
  digitalWrite(F, HIGH);
  delay(g);
  digitalWrite(A, LOW);
  digitalWrite(B, HIGH);
  digitalWrite(C, LOW);
  digitalWrite(D, LOW);
  digitalWrite(E, HIGH);
  digitalWrite(F, HIGH);
  delay(g);
  digitalWrite(A, HIGH);
  digitalWrite(B, LOW);
  digitalWrite(C, LOW);
  digitalWrite(D, LOW);
  digitalWrite(E, HIGH);
  digitalWrite(F, HIGH);
  delay(g);
  digitalWrite(A, HIGH);
  digitalWrite(B, LOW);
  digitalWrite(C, LOW);
  digitalWrite(D, HIGH);
  digitalWrite(E, LOW);
  digitalWrite(F, HIGH);
  delay(g);
  digitalWrite(A, HIGH);
  digitalWrite(B, LOW);
  digitalWrite(C, LOW);
  digitalWrite(D, HIGH);
  digitalWrite(E, HIGH);
  digitalWrite(F, LOW);
  delay(g);
  digitalWrite(A, LOW);
  digitalWrite(B, HIGH);
  digitalWrite(C, LOW);
  digitalWrite(D, HIGH);
  digitalWrite(E, HIGH);
  digitalWrite(F, LOW);
  delay(g);
}

Du könntest den Zustad der LED als Binärzahl in ein Array schreiben und nacheinender ausgeben. So kannst Du auch einfach neue Figuren eingeben.

Steuerst Du immer nur 1 LED an?

Grüß Uwe

Hallo Uwe,

gibt es da eine gute beschreibung zu wie man das mit den arrays macht oder soll ich mich da einfach mal durchsuchen hier im forum?
im Moment gebe ich immer jeden einzelzustand nacheinander aus. Also zum beispiel LED oben links an alle anderen aus und so weiter.

Liebe Grüße

Lutz

Wenn der Geasmtstrom pro Reihe nicht über 30mA ist kannst Du auch alle LED einer Reihe ansteuern.
Grüße Uwe

Einfacher und übersichtlicher wird es, wenn du dir eine Funktion schreibst, die die Darstellung auf dem Display übernimmt. Dieser Funktion übergibst du dann nur noch zwei Variablen für die Position des Pixels.

Hallo Lutz,
auf die schnelle, so kann man schon vereinfachen:
Ich hab im Moment wenig Zeit, jetzt muß man nur noch ein wenig Logig schreiben, um bei jedem Durchlauf die richtigen LEDs anzusteuern, aber auch das ist mit ein wenig Zeit machbar :slight_smile:

int ledPins[] = {7,8,9,10,11,12};
int g = 200; //Variable für Geschwindigkeit
int i;
void setup() {
 for (int i=0; i < 6; i++){
   pinMode(ledPins[i],OUTPUT);
  }
}
void loop ()
{
 for (int i=0; i < 6; i++){
  digitalWrite(ledPins[0],LOW);
  digitalWrite(ledPins[1],LOW);
  digitalWrite(ledPins[2],HIGH);
  digitalWrite(ledPins[3],HIGH);
  digitalWrite(ledPins[4],HIGH);
 digitalWrite(ledPins[4],LOW);
  delay(g);
  
 }
 }

Hallo zusammen,

Danke erstmal für Eure Antworten!

@sth77:
Wie muss ich mir so eine Funktion vorstellen? Ich bin leider noch am Anfang mit der Programmierung.

@maverick1509:
Danke für den Sketch! Ich habe Ihn unverändert mal aufs Arduino geladen und es leuchten 2 LED´s :slight_smile:
Was meinst du mit "Logig schreiben"?

Danke für Eure Hilfe schonmal!

Mit freundlichen Grüßen
Lutz

@maverick: dein Ansatz kann nicht funktionieren, da er ja nur 6x den selben Zustand schaltet.

Ich würde es, wie von STH vorgeschlagen über eine Routine lösen:

int pin[] = {7,8,9,10,11,12};
int sizeOfArray = 6;
int delayTime = 200;

void setup() 
{
 for (int i=0; i < sizeOfArray; i++)
 {
  pinMode(pin[i],OUTPUT);
 }
}

void setPins (boolean p0, boolean p1, boolean p2,  boolean p3, boolean p4, boolean p5)
{
  digitalWrite(pin[0], p0 == true ? HIGH:LOW);
  digitalWrite(pin[1], p1 == true ? HIGH:LOW);
  digitalWrite(pin[2], p2 == true ? HIGH:LOW);
  digitalWrite(pin[3], p3 == true ? HIGH:LOW);
  digitalWrite(pin[4], p4 == true ? HIGH:LOW);
  digitalWrite(pin[5], p5 == true ? HIGH:LOW);
  delay(delayTime);

}

void loop ()
{
  setPins (false, false, true, true, true, false);
  setPins (false, false, true, true, false, false);
  setPins (false, false, true, false, true, true);
  //und so weiter 
}

...oder wertest Bitweise aus, z.B. "B001110" (Dezimal 14), finde ich immer recht elegant, diese lösung.

Also etwa dann

//ungetestet -> keinen Arduino da gerade.
void setPins(byte Pins)
{ 
  for(byte i = 0; i < sizeOfArray; i++)
  digitalWrite(pin[i], ((1 << i) & Pins) > 0 ? HIGH:LOW);

  delay(delayTime);
}

void loop()
{
  setPins (B001110);
  //oder
  setPins (14);
}

Hallo Zusammen!

Danke für eure Hilfe. Es freut mich immer wieder zu sehen wie Hilfsbereit viele Menschen sind!

@ Markus W:
Deine 2. Variante, also die Bitvariante gefällt mir sehr gut!
Damit habe ich jetzt auch schon ein wenig rumprobiert. Wie kann ich nun damit Muster erzeugen?
Muss ich da quasi jeden ledzustand einzeln programmieren oder gubt es da eine eibfachere Methode?

Grüße
Lutz

Wenn Du LEDs ansteuern willst, dann schau Dir mal die Beispiele in meinem Blog an. Ich nehme 20 LEDs aber die Methoden kannst Du auch mit Deinen 9 LEDs anwenden.