Jedes ButtonPad hat 4 Grounds und 1xR 1xG 1xB (die Switches mal aussen vorgelassen)
4x4 Grounds = 16
4x3 RGB = 12
Was ist daran falsch?
Um die Farben pro Knopf zu steuern, muss ich sowohl die einzelnen Grounds wie auch die Farben kontrollieren können, da sonst alle 4 Knöpfe gleichzeitig in einer Farbe leuchten.
Ich bin ehrlich gesagt nun noch verwirrter als zu Begin.
Ich habe mal ein Bild gemacht, was zeigt wie ich das ganze verkabelt habe.
Wie ich alle LEDs an einen Ground packen kann und dann trozdem noch jedes LED einzeln ansteuern kann ist mir ein Rätsel.
Wenn es die Schaltung vereinfacht, verzichte ich auch auf PWM Modulation. Ich will einfach satte und stark leuchtende Farben und
jedes LED einzeln ansteuern können. So das mehrfarbige Animationen möglich sind.
Wie ich verstanden habe fahre ich dazu also Möglichst schnell die LEDs ab (so wie ein Kathodenstrahl im Röhremonitor) und setze die entsprechende Farbe.
Also leuchtet immer nur ein LED aber da das so schnell passiert sieht man das nicht. Ist das vom Verständnis her richtig?
Kann ich die Wiederstände wegnehmen damit es heller wird, wenn ich schnell genug durch die LEDs gehe? Oder gehn die dann trotzdem gleich kaputt?
Im Moment leuchten die LEDs wirklich sehr wenig.
ULN Chip ist angekommen. Und ich bin am rumbasteln dabei ist mir folgendes aufgefallen:
Hier sieht man die obere Reihe. Es sind rote Buttons und der 5te ist blau.
Die ist wenn ich die Fabren mit digitalWrite ausgebe.
Und jetzt:
Das selbe Prog. hier die Farben aber mit analog Write ausgegeben.
Die ersten 4 Buttons sind noch rot. Die Buttons danach machen einen flackernden Farbverlauf von Pink zu Rot.
Hier noch mein Code:
int data = 2;
int clock = 3;
int latch = 4;
int blu = 9;
int grn = 10;
int red = 11;
void setup()
{
pinMode(data, OUTPUT);
pinMode(clock, OUTPUT);
pinMode(latch, OUTPUT);
pinMode(grn, OUTPUT);
pinMode(blu, OUTPUT);
pinMode(red, OUTPUT);
digitalWrite(red, 0);
digitalWrite(grn, 0);
digitalWrite(blu, 0);
}
int i = 4;
int row1[] = {B00000001, B00000010, B00000100, B00001000, B00010000, B00100000, B01000000, B10000000};
void loop()
{
for(int a=0; a<8; ++a)
{
updateLEDs(a);
if(a == i)
anaRGB(0,0,255);
else
anaRGB(255,0,0);
delay(1);
}
}
void rgb(boolean r, boolean g, boolean b)
{
digitalWrite(red, r); digitalWrite(grn, g); digitalWrite(blu, b);
}
void anaRGB(byte r, byte g, byte b)
{
analogWrite(red, r); analogWrite(grn, g); analogWrite(blu, b);
}
void updateLEDs(int idx)
{
digitalWrite(latch, LOW); //Pulls the chips latch low
shiftOut(data, clock, MSBFIRST, row1[idx]);
digitalWrite(latch, HIGH); //Pulls the latch high displaying the data
}
Das Setup ist wie hier besprochen.
Mache ich etwas flasch im Code?
Ach und heller könnten sie immer noch sein. Ist absolut kein Vergleich zudem wie hell eine einzelne LED ist. Ich verstehe ja, dass die Helligkeit durch das durchrasen etwas abnimmt... aber ca. 50-60% ???
Zur zeit haben alle 560 Ohm. Den Wert hab ich von einem Anfänger Tutorial.
Hat das was mit dem verschmieren der Farben zu tun?
Bei den LEDs lag noch n Zettel bei:
COLOR............: RGB
BRIGHTNESS...: 2800mcd/6500mcd/1200mcd
VDrop.............: 2.0V/3.2V/3.2V
IMax...............: 20mA
Resistor Value.: 300Ohm/150Ohm/150Ohm