Forum: Mikrocontroller und Digitale Elektronik LED steuern mit arduino uno r3


von Imran H. (bengaltiger)


Angehängte Dateien:

Lesenswert?

hallo

seit paar tagen(bin ein anfänger) versuche ich eine led matrix mit 
arduino uno r3 zu bauen.
Nun hab ich eine 3x3 matrix nach langen verushcen auf einem breadboard 
hinbekommen.
Jetzt versuche ich das ganze teil zu steuern.

z.B.

ich schalte nur den mittleren led ein also 2.reihe und 2.spalte

zuerst dachte ich der code sei das hier:
1
void setup(){
2
 pinMode(5,OUTPUT);
3
 pinMode(6,OUTPUT);
4
 pinMode(7,OUTPUT);
5
 pinMode(11,OUTPUT);
6
 pinMode(12,OUTPUT);
7
 pinMode(13,OUTPUT);
8
}
9
10
void loop(){
11
  digitalWrite(6,HIGH); //2.reihe
12
  digitalWrite(12,HIGH); //2.spalte
13
}

das lieferte mir aber dass jeweils das led der 1.+3.reihe in der 
2.spalten leuchten

wenn ich das benutze klappts
1
void setup(){
2
 pinMode(5,OUTPUT);
3
 pinMode(6,OUTPUT);
4
 pinMode(7,OUTPUT);
5
 pinMode(11,OUTPUT);
6
 pinMode(12,OUTPUT);
7
 pinMode(13,OUTPUT);
8
}
9
10
void loop(){
11
  digitalWrite(5,HIGH); //1.reihe
12
digitalWrite(7,HIGH); //3.reihe
13
  digitalWrite(12,HIGH); //2.spalte
14
}

es sieht so aus dass man mehr zeilen für 1 led benötigt als für 2;)

wenn es so stimmen würde hab ich die vermutung dass das der positive 
strom von reihe 1 und 3 die reihe 2 isoliert damit der strom von - nach 
+ strömen kann

naja und meine 2.frage gleich wäre wie man mehrere leds gleichzeitig in 
verschiedenen spalten darstellen kann oder das es zumindest so aussieht 
das alle gleichzeitig leuchten z.B eine diagonale



naja danke im vorraus :D

von Marius P. (marius_p)


Lesenswert?

Bei sowas lässt man normalerweise immer nur EINE Led auf einmal 
leuchten.
Wenn mehrere gleichzeitig leuchten sollen wechselt man hald ziemlich 
schnell öfters zeischen beiden hin und her.

Siehe Youtube; Led Multiplexing

von Thomas_L (Gast)


Lesenswert?

Dein Denkansatz ist müll!
Wenn du die mittlere LED eischalten willst, muss die Zeile (Pin 6) auf 
Low und die Spalte (Pin 12) auf High. Mit beiden Pins auf High oder Low 
wird deine Led nicht leuchten.

Und schau mal hier:
LED-Matrix - http://www.mikrocontroller.net/articles/LED-Matrix

von Imran H. (bengaltiger)


Angehängte Dateien:

Lesenswert?

@thomas_l
naja mit meiner 2ten variante hat es funktioniert
aber ich weis  nicht warum das so ist und warum dein vorschlag nicht bei 
mir klappt

hab im anhang ein bild von meinem board hochgeladen
die grünen kabel verbidet die anoden und die gelben die kathoden

alle leds leuchten so ist alles richtig verbunden
...

ich hoffe ihr könnt mir weiterhelfen

von Imran H. (bengaltiger)


Lesenswert?

hab jetzt mit deinem vorschlag probiert es klappt nur
wenn ich nur die pins 6 und 12 mit pinMode setze
sonst nicht :((((

von Imran H. (bengaltiger)


Lesenswert?

keiner möchte helfen?(ja ich hab auch den link von thomas angeschaut 
hilft mir nicht richtig weiter...)

von Hubert G. (hubertg)


Lesenswert?

Dein Bild oben irritiert mich etwas.
Du schreibst das grün mit der Anode verbunden ist. Der rechte grüne 
Draht geht aber auf GND. Wie leuchten da die LED?

von Imran H. (bengaltiger)


Lesenswert?

ne guck rihtig hin es sind die pins 8-13 dan folgt gnd
die ersten 3 pins links von den grünen 3er kabel sind pon 8-10
folglich sind die 3kabel auf 10-13 vllt wegen dem knick im letzten kabel 
niht erkenbar
das grüne kabel was ganz recht ist weit weg von den anderen 3 dient als 
befestigung des boards hab das loch mit dem kabel am breadboard 
befestigt..

von Hubert G. (hubertg)


Lesenswert?

Ja, ist im Bild etwas verschoben.
Du musst die nicht benötigten Spalten und Zeilen mit Pinmode(Input) 
abschalten. So kannst du immer nur eine Led einschalten.
Willst du mehrere Led gleichzeitig einschalten, so muss das schnell 
hintereinander geschehen.
Achte auch darauf das der max. Strom an einem Pin nur 20mA sein darf. 
Wenn z.B. in einer Zeile alle Led gleichzeitig leuchten.

von Imran H. (bengaltiger)


Lesenswert?

ok danke
also ist meine schaltung in ordnung oder?

von Hubert G. (hubertg)


Lesenswert?

Die Schaltung sollte passen, nur die Software nicht.
Für die linke obere Led sollte es so sein:
 pinMode(5,OUTPUT);
 pinMode(6,INPUT);
 pinMode(7,INPUT);
 pinMode(11,INPUT);
 pinMode(12,INPUT);
 pinMode(13,OUTPUT);
  digitalWrite(5,LOW); //1.reihe
  digitalWrite(13,HIGH); //3.spalte

von Imran H. (bengaltiger)


Lesenswert?

ok ich werde es ausprobieren
wenns so ist schreibe ich eine methode damit es leichter geht

von Hubert G. (hubertg)


Lesenswert?

So ist es etwas einfacher, zumindest um zwei Zeilen weniger.
Das vorhergehende war aus einer Schaltung mit Dualleds.
 digitalWrite(5,LOW);
 digitalWrite(6,HIGH);
 digitalWrite(7,HIGH);
 digitalWrite(11,LOW);
 digitalWrite(12,LOW);
 digitalWrite(13,HIGH);

von Imran H. (bengaltiger)


Lesenswert?

ok hab ich

funktioniert auch ich brauch bissel hilfe beim programmieren
hab einige methoden gemacht

ein der arrays als eingabe wert besitzt
1
void animateLeds(int leds, int xs[], int ys[], int time){
2
  int times=int(time/(3*fps));
3
  while(times>=0){
4
    for(int n=0;n<leds;n++){
5
       setLed(xs[n],ys[n]); 
6
    }times--;
7
  }
8
}

nun will ich diese benutzen
1
void loop(){
2
  int xs[]={0,0,0};
3
  int ys[]={0,1,2};
4
  animateLeds(3,xs,ys,2000);
5
  delay(1000);
6
  clearMatrix();
7
}

das klappt auch
1
void loop(){
2
  animateLeds(3,new int[]={0,0,0},new int[]={0,1,2},2000);
3
  delay(1000);
4
  clearMatrix();
5
}

das aber nicht warum?
das kommt als error:
------------------------------------------------------------
test.cpp: In function 'void loop()':
test:57: error: expected primary-expression before ']' token
test:57: error: expected primary-expression before '{' token
test:57: error: expected primary-expression before ']' token
test:57: error: expected primary-expression before '{' token
-------------------------------------------------------------
diese schreib weise ist angenehmer da man die variablen nicht immer 
deklarieren muss außer demm bekom ich auch errors wen ich virablen mit 
den selben namen wieder deklariere

gibt es eine lösung?

von Karl H. (kbuchegg)


Lesenswert?

Imran H. schrieb:


>
1
> void loop(){
2
>   animateLeds(3,new int[]={0,0,0},new int[]={0,1,2},2000);
3
>   delay(1000);
4
>   clearMatrix();
5
> }
6
>
>
> das aber nicht warum?

Du schreibst jetzt 100 mal:
Ich soll nicht C# Syntax benutzen, wenn ich C++ programmiere.

> diese schreib weise ist angenehmer da man die variablen nicht immer
> deklarieren muss außer demm bekom ich auch errors wen ich virablen mit
> den selben namen wieder deklariere
>
> gibt es eine lösung?
1
void loop(){
2
  int values1[] = { 0, 0, 0 };
3
  int values2[] = { 0, 1, 2 };
4
5
  animateLeds(3, values1, values2, 2000);
6
  delay(1000);
7
  clearMatrix();
8
}

von Imran H. (bengaltiger)


Lesenswert?

deine lösung ist genau wie meine erste variante was funktionieert

man muss immer neue variablwn deklarieren also man muss dann mit value3 
und 4 weiter machen...


gibt es keine einfachere möglichkeit mit weniger zeilen???

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.