Hey Forum!
Eines vor weg: Ich bin absoluter Anfänger,! Das hier ist mein dritter Sketch und ich bin wirklich bemüht mich einzulesen, alles zu verstehen und die Beispiele Codes usw. zu nutzen. Leider komme ich gerade nicht weiter....
Ich möchte 4 LEDs gleichzeitig ansteuern. Alle LEDs sollen zufällig langsam aufleuchten und wieder langsam aus gehen. Dazwischen sollen ebenfalls zufällige Pausen sein (sowohl wenn die LEDs dunkel als auch wenn sie hell sind). Ich habe das Ganze für eine LED erfolgreich geschrieben, aber nachdem ich ein Array eingefügt habe, damit alle 4 LEDs gleichzeitig angesprochen werden funktioniert mein Sketch irgendwie nicht mehr... Da ist alles durcheinander was die Dimmvorgänge angeht.
Ich würde mich sehr freuen wenn mich jemand unterstützen könnte, da mir anscheinend das logische Verständnis fehlt...
Und wenn noch jemand eine Idee hat wie ich das Dimmen etwas samfter (bei niedriger Helligkeit) hinbekommen bin ich auch da offen für alles!
//Arduino Nano 4 variable Kanäle zum Dimmen (entweder LEDS oder Transistoren mit mehreren LEDS)
//PWM Pins 3,5,6,9
const int LEDs[] = {3, 5, 6, 9}; // verwendete Pins (PWM) für die LEDs
byte Status = 0; // LED Status auf 0 setzetn (0=hochdimmen 1= runter dimmen)
unsigned long Pause; // Variable: Pause zwischen den Dimmvorgängen
const long PMin = 1000; // kürzester Intervall
const long PMax = 10000; // längster Intervall
unsigned long PWMMin; // minimale Helligkeit
unsigned long PWMMax; // maximale Helligkeit
unsigned long DimAnfang; // Dimvorgang Startzeit
unsigned long DimDurchgang; // Dimvorgang Gesamtdauer
const long DimMin = 1000; // kürzeste Dimmzeit
const long DimMax = 100000; // längste Dimmzeit
unsigned long DimEnde; // Dimmvorgang Endzeitpunkt
unsigned long LetzterDurchgang = 0; // Zeitpunkt des Letzten Dimmvorgangs
unsigned long Jetzt; // Variable für den aktuellen Zeitpunkt
int Helligkeit; // Variable für die LED Helligkeit
void setup() {
Serial.begin(9600); // Seriellen Monitor aktivieren
for (int Pins = 0; Pins < 4; Pins++) { // LED Pins als Ausgang definieren
pinMode(LEDs[Pins], OUTPUT);
randomSeed(analogRead(1)); // start der Zufallszahlen Reihenvolge durch Rauschen des Analogen Eingang 1 vorgeben
Pause = 0; // den ersten Pausedurchgang auf 0 setzen
Jetzt = millis(); // der Variable Jetzt den aktuellen Zeitwert übergeben
}
}
void loop() {
PWMMin = random(0, 3); // zufälliger Wert für geringste Helligkeit
PWMMax = random(100, 256); // zufälliger Wert für die höchste Helligkeit
Jetzt = millis(); // der Variable Jetzt den aktuellen Zeitwert übergeben
//Serial.println((LetzterDurchgang + Pause) - Jetzt);
//Serial.println(Status);
//Serial.println(LetzterDurchgang);
for (int Pins = 0; Pins < 4; Pins++) { //Alle LEDs ansprechen
if (Jetzt - LetzterDurchgang >= Pause) { // Wenn der letze Durchgang länger her ist als die vorgegebene Pausenzeit dann...
//hoch dimmen:
if (Status == 0) { // Wenn die LED runter gedimmt ist dann...
DimAnfang = Jetzt; // Anfang des Dimmvorgangs als jetzt definieren
DimDurchgang = random(DimMin, DimMax); // Zufällige länge des Dimmvorgangs definieren
DimEnde = DimAnfang + DimDurchgang; // Zeit bis zum Ende des Dimvorgangs berechnen
for (long Dim = DimAnfang; Dim < DimEnde; Dim++) { // hoch dimmen
Helligkeit = map(Dim, DimAnfang, DimEnde, 0, 255); // variablen des Dimmvorgangs mappen: 0=Anfangs Intensität (zwischen 0 und 10 sowie Endintensität 255 zwischen 220 und 255)
analogWrite(LEDs[Pins], Helligkeit); // Helligkeit der LED aktualisieren
Status = 1; // LED Status auf 1 für runter dimmen setzen
//Serial.println(Helligkeit);
}
}
// runter dimmen
else if (Status == 1) { // Wenn die LED hoch gedimmt ist dann...
DimAnfang = Jetzt; // Anfang des Dimmvorgangs als jetzt definieren
DimDurchgang = random(DimMin, DimMax); // Zufällige länge des Dimmvorgangs definieren
DimEnde = DimAnfang + DimDurchgang; // Zeit bis zum Ende des Dimvorgangs berechnen
for (long Dim = DimEnde; Dim > DimAnfang; Dim--) { // runter dimmen
Helligkeit = map(Dim, DimAnfang, DimEnde, 0, 255); // variablen des Dimmvorgangs mappen: 0=Anfangs Intensität (zwischen 0 und 2 sowie Endintensität 255 zwischen 100 und 255)
analogWrite(LEDs[Pins], Helligkeit); // Helligkeit der LED aktualisierenStatus = 1; für runterdimmen setzen
Status = 0; // LED Status auf 0 für hoch dimmen setzen
//Serial.println(Helligkeit);
}
}
LetzterDurchgang = millis(); // Zeit für letzten Durchgang aktualisieren
Pause = random(PMin, PMax); // neuer Zufallswert für die nächste Pause
}
}
}