8xRGB

Oh, vergiss was ich gesagt habe, so macht das ganze was ich vorgeschlagen habe natürlich keinen Sinn.

Sorry wenn ich Verwirrung gestiftet habe :wink:

Keine Ursache. :slight_smile:

Das nächstemal kommt das Bild als Erstes! :smiley:

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.

Mit Rot, Grün und Blau legst Du fest welche Farbe die Leuchtdiode haben soll welche Du erhellen willst.

Danach wählst Du über den entsprechenden Ground die entsprechende Led aus.

Von der Funktion her offensichtlich eine 16X1 Led-Matrix.

Vermute mal das Du die Leds 50X16 mal in der Sekunde abklappern musst !

Man könnte mit jeweils einem 74HC595 einen ULN2803 und damit jeweils 8 Grounds steuern. Dann müsste auch die Helligkeit entsprechend stark sein.

Ach ja, man betreibt eine Led grundsätzlich niemals ohne Vorwiderstand.

Wenn immer nur eine Led leuchtet dann Grün und Blau jeweils 100Ohm und Rot 150Ohm. Für jeweils 5V Maximum beim PWM-Signal.

Uploaded with ImageShack.us

Das 2X2 Button Pad habe ich durch eine RGB-Led (mit gemeinsamer Kathode) dargestellt !

Die 16 Grounds der Schalter sind hierbei allerdings noch nicht berrücksichtigt !

Cool! Ich danke dir.
Werde mich mal auf die Suche nach dem Chip begeben.

http://www.reichelt.de/?;ACTION=3;LA=444;GROUP=A21E;GROUPID=2921;ARTICLE=22085;START=0;SORT=artnr;OFFSET=16;SID=30TOwV338AAAIAAG-m90892538ad97e3dc2877a4a8a9ee4aa448c

Beim ULN2803 wird die Kathode der Leds mit den Ausgängen verbunden !
An den Eingängen des ULN2803 werden die Ausgänge des 74HC595 angeschlossen !

ULN2803 Datasheet:

Ich denke mal das dies eine Hilfe für die Abfrage der eigentlichen Keypad Matrix sein könnte.

The Matrix Keypad:
http://www.arduino.cc/playground/Main/KeypadTutorial

Matrix Keypad library:
http://www.arduino.cc/playground/Code/Keypad

Matrix Keypad Zip-File Download:
http://www.arduino.cc/playground/uploads/Code/Keypad.zip

Jupp, daran hab ich heute während der Arbeit auch rumgedacht. Steht noch auf der ToDo-Liste nach ein paar Interrupt Tutorials.

Danke für die Links!

Und der UNL Chip ist bestellt :slight_smile:

Mit der 4X4 Tasten Version deines Keypads könnte man ein 16 Tasten Senso-Spiel bauen ! Etwas schwieriger als die 4 Tasten Urversion.

MB Senso von 1978 in Aktion:

Ich würd nach wie vor ein Octinct draus bauen oder ein Arduinome :smiley:

Vermute mal das Du so etwas meinst ?

OcTinct running refmatrix:

Was macht das Ding eigentlich ?

Richtig.

MIDI Noten erzeugen.

Ist eines der fortschrittlichsten Musik-Controller die es zurzeit gibt.

Octinct ist quasi ein Arduinome / Monome Clone in RGB.

Sooo...

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% ???

Welche Werte haben deine Widerstände für Rot, Grün und Blau ?

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

Zur zeit haben alle 560 Ohm. Den Wert hab ich von einem Anfänger Tutorial.

Ich würde es so machen wie es auf dem Zettel steht !

Resistor Value.: 300Ohm/150Ohm/150Ohm

Rot braucht den höchsten Widerstandswert sonst überstrahlt der Rotanteil alles !

Naja, es stand nicht dabei für welche Voltzahl. Deshalb hab ich da nix angepasst.
Werde ich gleich mal ändern. Danke!

Hast Du Antworten auf meine anderen Fragen? Weil irgendwie habe ich das Gefühl. Das dass Ganze irgendwie noch nicht so läuft wie es soll. Gerade das mit den verschlierenden Farben und der Helligkeit kann irgendwie nicht sein.

Ich werde mir deinen Code Morgen mal Zeile für Zeile durchlesen !

Okay, danke dir!!!

:slight_smile:

Um PWM benutzen zu können musst Du den analogWrite-Befehl benutzen.

Gehe ich richtig in der Annahme das alle 8 Tasten Rot und Blau blinken sollen ?

B00000001 stellt die Bits eines Bytes dar also statt int row1 nun byte row1 benutzen.

byte row1[] = {B00000001, B00000010, B00000100, B00001000, B00010000, B00100000, B01000000, B10000000};
void updateLEDs(byte row, byte r, byte g, byte b)
{
  digitalWrite(latch, LOW);                   // Pulls the chips latch low
  shiftOut(data, clock, MSBFIRST, 0);         // Alle Leds aus
  digitalWrite(latch, HIGH);                  // Pulls the latch high displaying the data
  analogWrite(red, r);                        // Ändern der 3 Farbkannäle erst wenn Leds aus
  analogWrite(grn, g);  
  analogWrite(blu, b);
  digitalWrite(latch, LOW);                   // Pulls the chips latch low
  shiftOut(data, clock, MSBFIRST, row); // Festlegung der Led die leuchten soll
  digitalWrite(latch, HIGH);                  // Pulls the latch high displaying the data
}
void loop()
{
  for (int Zeit = 0; Zeit < 1000; Zeit += 1)
  {
    for(byte LMReihe = 0; LMReihe < 8; LMReihe += 1)
    {
      if(Zeit < 250)
        updateLEDs(row1[LMReihe], 0, 0, 255); // Blau
      else
        updateLEDs(row1[LMReihe], 255, 0, 0); // Rot
      delay(1);
    }
  }
}