Pages: [1]   Go Down
Author Topic: Sketch vereinfachen  (Read 725 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 21
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
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);
}

Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 236
Posts: 20236
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 21
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 236
Posts: 20236
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Germany
Offline Offline
Edison Member
*
Karma: 44
Posts: 2261
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Offline Offline
Sr. Member
****
Karma: 2
Posts: 347
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 :-)


Code:
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);
  
 }
 }
« Last Edit: October 01, 2012, 04:03:53 am by maverick1509 » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 21
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 :-)
Was meinst du mit "Logig schreiben"?

Danke für Eure Hilfe schonmal!

Mit freundlichen Grüßen
Lutz
Logged

Offline Offline
God Member
*****
Karma: 9
Posts: 721
42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@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:

Code:
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
}
« Last Edit: October 01, 2012, 06:00:06 pm by Marcus W » Logged


Offline Offline
God Member
*****
Karma: 9
Posts: 721
42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Also etwa dann
Code:
//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);
}
« Last Edit: October 01, 2012, 06:29:13 pm by Marcus W » Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 21
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

0
Offline Offline
Faraday Member
**
Karma: 19
Posts: 3420
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Check out my experiments http://blog.blinkenlight.net

Pages: [1]   Go Up
Jump to: