// Variable hält Zeitpunkt, an dem als nächstes was gemacht werden soll
unsigned long nextActiveMillis_ROT;
unsigned long nextActiveMillis_BLAU;
// Aktualisierungsinterval in ms
int delay_ROT = 50;
int delay_BLAU = 500;
// aktuelle Helligkeit (0..255)
int brightness_ROT = 0;
int brightness_BLAU = 0;
// Wieviele Helligkeitsschritte pro Anpassung verändern
int stepSize_ROT = 5;
int stepSize_BLAU = 25; // größere Schritte als bei ROT machen
void setup() {
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
// Anfangszustand herstellen: beide aus
digitalWrite(9, LOW);
digitalWrite(10, LOW);
nextActiveMillis_ROT = millis(); // wir beginnen sofort mit der ersten Aktion
nextActiveMillis_BLAU = millis(); // wir beginnen sofort mit der ersten Aktion
}
void loop() {
// prüfen, ob wir ROT ändern
if (millis() >= nextActiveMillis_ROT) {
// Helligkeit stufenweise ändern
brightness_ROT = brightness_ROT + stepSize_ROT;
// auf Wertebereich beschränken
if (brightness_ROT > 255)
brightness_ROT = 255;
if (brightness_ROT < 0)
brightness_ROT = 0;
// neue Helligkeit (Spannungswert) setzen
analogWrite(9, brightness_ROT);
// Beim Unterschreiten oder Überschreiten der Grenzen die Richtung tauschen
if (brightness_ROT <= 0 || brightness_ROT >= 255)
stepSize_ROT = -stepSize_ROT;
nextActiveMillis_ROT = millis() + delay_ROT;
}
// prüfen, ob wir BLAU ändern
if (millis() >= nextActiveMillis_BLAU) {
// Helligkeit stufenweise ändern
brightness_BLAU = brightness_BLAU + stepSize_BLAU;
// auf Wertebereich beschränken
if (brightness_BLAU > 255)
brightness_BLAU = 255;
if (brightness_BLAU < 0)
brightness_BLAU = 0;
// neue Helligkeit (Spannungswert) setzen
analogWrite(10, brightness_BLAU);
// Beim Unterschreiten oder Überschreiten der Grenzen die Richtung tauschen
if (brightness_BLAU <= 0 || brightness_BLAU >= 255)
stepSize_BLAU = -stepSize_BLAU;
nextActiveMillis_BLAU = millis() + delay_BLAU;
}
// hier könnten wir jetzt noch anderes Zeug machen, während wir auf das Eintreten des
// nächsten Schaltzustandes warten
}