Getestet hab ich das ganze mit einem UNO aber ich habe noch einen Mega2560 hier rumliegen, den ich dann für das Projekt nutzen werde. zZ. teste ich mit dem das Midi-Shield.
// Unter Benutzung eines 74HC595 und eines ULN2803
// für ein Button Pad 2x2 von http://www.sparkfun.com
int data = 2; // 74HC595
int clock = 3; // 74HC595
int latch = 4; // 74HC595
int blu = 9; // Arduino Digital Pin 9
int grn = 10; // Arduino Digital Pin 10
int red = 11; // Arduino Digital Pin 11
int row1[] = {B00000001, B00000010, B00000100, B00001000};
void setup()
{
pinMode(data, OUTPUT);
pinMode(clock, OUTPUT);
pinMode(latch, OUTPUT);
pinMode(grn, OUTPUT);
pinMode(blu, OUTPUT);
pinMode(red, OUTPUT);
}
void loop()
{
updateLEDs(row1[0], 255, 0, 0);
delayMicroseconds(3000);
updateLEDs(row1[1], 0, 255, 0);
delayMicroseconds(3000);
updateLEDs(row1[2], 0, 0, 255);
delayMicroseconds(3000);
updateLEDs(row1[3], 255, 255, 255);
delayMicroseconds(3000);
}
void updateLEDs(byte row, byte r, byte g, byte b)
{
digitalWrite(latch, LOW); // Pulls the chips latch low
shiftOut(data, clock, MSBFIRST, 0); // Festlegung der Led die leuchten soll
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);
delayMicroseconds(1875); // Ein verkleinern dieses Wertes führt zur Farbvermischung
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
}
Im mom kann ich es gerade noch nicht ausprobieren, da ich gerade den ganzen Aufbau auf eine Prototypenkarte übertrage.
Und ich bin etwas langsam was das löten angeht
Wie hast Du rausgefunden dass es genau 1875 Mikrosekunden dauert???
Und warum dauert das "so lange" ? Bei digitalWrite gibt es dieses Problem ja anscheinend nicht.
Zuerst einmal vermute ich das es an der Art liegt wie das PWM-Signal produziert wird, also an seinen Eigenheiten.
Ich habe die Leds rot, gruen, blau und weiss in Reihe leuchten lassen.
Wenn ich weniger als 1875 Mikrosekunden gewartet habe konnte ich sehen das bei der grünen auch das rote ganz kurz aufleuchtet und bei der blauen das grüne. Als ich den Wert dann auf 1875 gesetzt hatte tauchte dieses Phanomen nicht mehr auf.
Vielleicht kann man den delayMicroseconds(1875)
Wartebefehl durch
Hey, ja ganz gut. Bin gestern Nacht mit dem zusammen löten fertig geworden. Und mal wieder angeschlossen. Hab aber irgendwie noch n paar Wackelkontakte oder sowas, die ich erstmal beheben muss. Aber läuft mal soweit. Da ich n Mega verbaue hab ich mehr als genug Steckplätze um jeden Button einzeln abzunehmen. Brauche da also keine IC's für oder so.
Und das nächste mal werde ich ganz sicher ein PCB ätzen. Denn all diese Verbindungen auf nem PrototypenBoard zu löten ist einfach Sch*****! Dazu sind mir teilweise die Kupferringe abgefallen(n bissie lange erhitzt) und im Loch drin hats auch kein Kupfer.
Wie ists eigentlich beim selber ätzen. Gibt es Möglichkeiten die Löcher auch innen zu verkupfern und leitende Durchgänge zu machen? Oder können das nur Profis mit speziellen Tools?
Ach ja, hast Du einen Tipp wie ich am besten die schwarzen Female-Stecker der Arduino weglöten kann? Oder lässt man die dran und macht bei den Drähten die Male-Stecker an und verleimt das ganze?
Ahhh cool, werde ich mal bestellen und auschecken.
Ansonsten bin ich noch dran. Hab mein gelötetes über den Haufen geworfen und habe nochmals begonnen. Mit ein paar anderen Ideen.
zB. gehe ich nicht mehr durch alle 16 LEDs und schalte die an und aus sondern mache das pro 4er Block. Was der Helligkeit wohl zugute kommt. Macht es aber auch ein bisschen komplizierter Software-Seitig.
Die Buttons nehme ich im Moment direkt am Mega ab. Der hat genug In-/Outputs.
Eine Frage hat sich noch im zusammenhang mit dem Projekt ergeben:
Kannst Du hier genau sehen welche Anschlüsse gebraucht werden vom Arduino?
Ich will das Ding nicht mehr oben drauf stecken, sondern nur noch mit Kabeln verbinden. (Es verbraucht sinnlos Platz auf dem Mega)
Ich sehe folgende Anschlüsse:
Pin4
Pin5
TX
RX
V5
und irgend ein Ground wird wahscheinlich auch gebraucht.
@stundenblume: Thnx für den Link! Ist aber leider ein anderes Shield. Das was ich besitze ist das Midi-Breakout und hat keine Knöpfe oder Potis.
Aber ich hab mal die Info an die Seite weitergeleitet und hoffe der Typ da findet es raus
@mega: Also ich "multiplexe" immer noch. Es ist immer noch jedes LED einzeln ansteuerbar. Also ich benutze im Moment 9 Kanäle nur für die RGB Kabel... hust und 16 für die Grounds und 16 für die Buttons. Aber die LEG-Grounds nehme ich nachher wieder zusammen mit dem 74595 und dem ULN, wie schon besprochen.