es geht auch mit delay().
Du must halt nur alles in einer Schleife machen.
das könnte z.B. so aussehen:
int pausen = 500;
int vals [] = { 0, 1, 2, 2, 2, 3, 3, 4, 5, 6, 7, 8, 10, 11, 13, 16, 19, 23,
27, 32, 38, 45, 54, 64, 76, 91, 108, 128, 152, 181, 215, 255
};
int numVal = 32; //number of values in array
byte schwelle = 178; // 70% * 255; Schwelle, bei der die nächste LED einsetzt.
byte a,b,c; // Zählervariablen für 3 LEDs
unsigned long sweepstart; // Zeit merken, zu der der Dimmprozess gestartet wurde.
void setup() {
for (int i = 2; i < 10; i++) {
pinMode(i, OUTPUT);
}
}
void loop() {
// Zählervariablen berechnen
a = min(a++, numVal-1); // Zähler 1. LED wird hochgezählt bis 31
if (vals[a] > schwelle){
b = min(b++, numVal-1); // Zähler 2. LED wird hochgezählt bis 31, wenn Wert 1. LED > Schwelle,
}
if (vals[b] > schwelle){
c = min(c++, numVal-1); // Zähler 3. LED wird hochgezählt bis 31, wenn Wert 2. LED > Schwelle,
}
analogWrite(2, vals[a]);
analogWrite(3, vals[b]);
analogWrite(4, vals[c]);
delay(pausen);
// Rücksetzen alle Variablen und wiederholen nach einer Pause
if(millis()-sweepstart > pausen * 128){ // Ist die Wartezeit abgelaufen? (Dauer=pausen*128)
a=0; // Zählervariablen rücksetzen
b=0;
c=0;
sweepstart = millis(); // Zeitpunkt des Neustarts merken
}
}
Der Code ist nicht getestet, nur einfach mal so ins Blaue geschrieben.
er sollte nach dem Starten die LEDs nacheinander hochdimmen nur, um einfach mal eine Idee zu geben, wie man es machen könnte.
Grundsätzlich ist aber eine delay() Lösung immer schlecht.
Daher habe ich dir über millis() einen Neustart eingebaut, der das hochdimmen immer wieder wiederholt.
Was ich dir empfehlen würde: nimm ein Blatt Papier und zeichne dir mal auf, was der Arduino eigentlich machen soll. Ein Flussdiagramm ist da sehr hilfreich und leicht zu zeichen.