Tommy56:
Du musst natürlich auch alle LED-Pins als Ausgang definieren. Das sieht man in Deinem Fragment nicht, ob Du das tust. Mit dem kompletten Sketch könnte man sich viele Rückfragen sparen.
Hier einmal das komplette Programm bis jetzt:
byte LEDPins[] = {11,2,3,4,5,6,7,8,9,10,1,12,13,14,15,16,17}; //17 LEDs
//-------------------------------------------------------------erste Sequenz
byte redPins[] = {3,7,10,1,14,16,0}; //6 LEDs
byte greenPins[] = {2,5,8,12,17,0}; //5 LEDs
byte bluePins[] = {4,6,9,13,15,0}; // 5 LEDs
byte yellowPin[] = {11,0};
//-------------------------------------------------------------zweite Sequenz
byte ebeneEins[] = {2,3,0}; //2 LEDs
byte ebeneZwei[] = {4,0}; //1 LED
byte ebeneDrei[] = {5,6,0}; //2 LEDs
byte ebeneVier[] = {7,8,0}; //2 LEDs
byte ebeneFuenf[] = {9,10,0}; //2 LEDs
byte ebeneSechs[] = {1,12,13,0}; //3 LEDs
byte ebeneSieben[] = {14,15,16,17,0}; //4 LEDs
//-------------------------------------------------------------dritte Sequenz
byte rundum[] = {11,2,5,9,14,15,16,17,10,6,3,0}; //11 LEDs
//-------------------------------------------------------------vierte Sequenz
byte seiteEins[] = {11,2,5,9,14,0}; //5 LEDs
byte seiteZwei[] = {11,7,1,15,0}; //4 LEDs
byte seiteDrei[] = {11,4,12,0}; //3 LEDs
byte seiteVier[] = {11,8,13,16,0}; //4 LEDs
byte seiteFuenf[] = {11,3,6,10,17,0}; //5 LEDs
void setup() {
allesAus();
//LED test
for(int i=0; i < 17; i++) {
digitalWrite(LEDPins[i],HIGH);
delay(300);
}
delay(1000);
for(int i=0; i < 17; i++) {
digitalWrite(LEDPins[i],LOW);
delay(100);
}
}
void loop() {
//-------------------------------------------------------------erste Sequenz
digitalWrite(yellowPin,HIGH);
delay(50);
redPinsAn();
greenPinsAn();
bluePinsAn();
delay(1000);
allesAus();
//-------------------------------------------------------------zweite Sequenz
/* for(int i=0; i < 3; i++) {
ebenenObenNachUntenAn();
delay(1000);
ebenenObenNachUntenAus();
delay(100);
}
*/
//-------------------------------------------------------------dritte Sequenz
for(int i=0; i < 5; i++){
rundumAn();
delay(1000);
rundumAus();
delay(100);
}
//-------------------------------------------------------------vierte Sequenz
seitenLinksNachRechtsAn();
delay(1000);
seitenLinksNachRechtsAus();
delay(1000);
}
//----------------------------------------------------------------------------------------------- Funktionen
void allesAus() {
for(int i=0; i < 17; i++) {
digitalWrite(LEDPins[i],LOW);
}
}
//-------------------------------------------------------------erste Sequenz
void redPinsAn() {
for(int i=0; i < 6; i++) {
digitalWrite(redPins[i],HIGH);
delay(80);
}
}
void greenPinsAn() {
for(int i=0; i < 5; i++) {
digitalWrite(greenPins[i],HIGH);
delay(80);
}
}
void bluePinsAn() {
for(int i=0; i < 5; i++) {
digitalWrite(bluePins[i],HIGH);
delay(80);
}
}
//-------------------------------------------------------------zweite Sequenz
void ebenenObenNachUntenAn() {
}
void ebenenObenNachUntenAus() {
}
//-------------------------------------------------------------dritte Sequenz
void rundumAn() {
for(int i=0; i < 11; i++) {
digitalWrite(rundum[i],HIGH);
delay(100);
}
}
void rundumAus() {
for(int i=0; i < 11; i++){
digitalWrite(rundum[i],LOW);
delay(100);
}
}
//-------------------------------------------------------------vierte Sequenz
void seitenLinksNachRechtsAn(){
for(int i=0; i < 5; i++) {
digitalWrite(seiteEins[i],HIGH);
delay(80);
}
for(int i=0; i < 4; i++) {
digitalWrite(seiteZwei[i],HIGH);
delay(80);
}
for(int i=0; i < 3; i++) {
digitalWrite(seiteDrei[i],HIGH);
delay(80);
}
for(int i=0; i < 4; i++) {
digitalWrite(seiteVier[i],HIGH);
delay(80);
}
for(int i=0; i < 5; i++) {
digitalWrite(seiteFuenf[i],HIGH);
delay(80);
}
}
void seitenLinksNachRechtsAus() {
for(int i=0; i < 5; i++) {
digitalWrite(seiteEins[i],LOW);
delay(80);
}
for(int i=0; i < 4; i++) {
digitalWrite(seiteZwei[i],LOW);
delay(80);
}
for(int i=0; i < 3; i++) {
digitalWrite(seiteDrei[i],LOW);
delay(80);
}
for(int i=0; i < 4; i++) {
digitalWrite(seiteVier[i],LOW);
delay(80);
}
for(int i=0; i < 5; i++) {
digitalWrite(seiteFuenf[i],LOW);
delay(80);
}
}
michael_x:
Es müsste
int* alleEbenen[] ={ebeneEins,ebeneZwei,ebeneDrei,ebeneVier,ebeneFuenf,ebeneSechs,ebeneSieben}; //7 Ebenen
heissen. Das hat aber noch den Nachteil, dass du nicht weisst, wie viele Elemente jede Ebene hat.
Mit digitalWrite kannst du jedenfalls nur einen einzelnen Pin ansprechen.
Vorschlag:
- nimm die 0 als Endekennung, oder (wenn du Pin 0 verwenden willst) die 255
- nimm byte statt int, um nicht ganz so verschwenderisch mit dem RAM umzugehen.
byte ebeneEins[] = {2,3, 0}; //2 LEDs
byte ebeneZwei[] = {4, 0}; //1 LED
byte ebeneDrei[] = {5,6, 0}; //2 LEDs
byte ebeneVier[] = {7,8, 0}; //2 LEDs
byte ebeneFuenf[] = {9,10, 0}; //2 LEDs
byte ebeneSechs[] = {1,12,13, 0}; //3 LEDs
byte ebeneSieben[] = {14,15,16,17, 0}; //4 LEDs
byte* alleEbenen[] = {ebeneEins,ebeneZwei,ebeneDrei,ebeneVier,ebeneFuenf,ebeneSechs,ebeneSieben}; //7 Ebenen
void setup() {
for(int i=0; i < 7; i++) {
byte* pin= alleEbenen[i] ;
while (*pin != 0) {
pinMode (*pin++, OUTPUT);
}
}
}
Hab es mit byte geändert, danke für den Hinweis!
Mich verwirrt gerade nur stark das OUTPUT??
uwefed:
Eigentlich sollte es umgekehrt sein, da die blauen LED eine größere Durchlaßspannung haben und darum wenn man einen ähnlichen LED Strom will, Die Vorwiderstände kleiner sein müssen.
Grüße Uwe
Wollte das Blau nicht so gresslich hell haben und gehe sehr wahrscheinlich noch höher mit dem Widerstand.
michael_x:
Immerhin hat er zum Schaltung prüfen ja schon einen Test-Sketch. ( Sehr löblich, übrigens )
Danke! 