RGB LED Strip für Aquarium, Sonnenuntergang-Mondlicht

Wie der Titel schon sagt, habe ich vor, bei Abschalten der Beleuchtung eine RGB-LED-Strip als Sonnenuntergang mit anschließendem Mondlicht zu bauen.

Die Funktion des Sonnenuntergangs habe ich schon hinbekommen, nur bekomme ich es nicht hin, dass solange das Licht aus ist, die RGB auf Blau bleibt, bis Das Tageslicht wieder an ist.

Hier mein bisheriger Code:

// Aquarium Sonnenuntergang mit Mondlicht geschaltet mit Fotowiederstand, wenn Leuchstofflampen aus sind.




const int BlauPin = 5;       // Blaue LED an Pin 5 angeschlossen
const int RotPin = 3;        // Rote LED an Pin 3 angeschlossen
const int GruenPin = 6;      // Gruene LED an Pin 6 angeschlossen
const int FadeZeit = 20;     // Ein höherer Wert verlangsamt den Farbwechsel
int r, g, b;                 // Variablen Rot, Gruen, Blau
int licht;                   // Variable Lichtsensor


void setup() {
  Serial.begin(9600);         //Serielle Schnittstelle zum Testen
  pinMode(BlauPin, OUTPUT);   // Pin´s auf Ausgang
  pinMode(RotPin, OUTPUT);    // Pin´s auf Ausgang
  pinMode(GruenPin, OUTPUT);  // Pin´s auf Ausgang
  // alles aus
  analogWrite(BlauPin, 0);
  analogWrite(GruenPin, 0);
  analogWrite(RotPin, 0);
}
void loop (){ 
  licht = analogRead(0);  // Sensor an Analog Pin 0
  Messen ();
}
void Messen (){
  Serial.println("Messen");
  analogWrite(BlauPin, 0);
  analogWrite(GruenPin, 0);
  analogWrite(RotPin, 0);
  if (licht < 200) {

    dim ();

  }
  else {
    return;
  }
}
void dim () {
  Serial.println("dimmen");
 
  analogWrite(BlauPin, 255);   // 100% Blau
  analogWrite(GruenPin, 255);  // 100% Gruen
  analogWrite(RotPin, 255);    //100% Rot
  delay(1000); 
   
  
  // Dimm grün
  for (g = 255; g > 0; g--) {
        analogWrite(GruenPin, g);
    delay(FadeZeit);
  }

  // Dimm Rot
  for (r = 255; r > 0; r--) {
       analogWrite(RotPin, r);
    delay(FadeZeit);
    
  }
}

Hier nochmal das Ziel:

Leuchtstofflampen sind an = LED-Strip aus

Leuchtstofflampen sind aus = Gruen dimmt ab - Rot dimmt ab - blau bleibt an

Leuchtstofflampen gehen wieder an = LED-Strip geht aus

kann mir da jemand nen Tip geben, wie ich es hinbekomme, das die Schleifen dim stehen bleibt, bis das Licht wieder an ist?

Gruß

Jörg

delays abschaffen. -> blinkwithoutdelay tutorial
Die loop wird dann sehr schnell durchlaufen und jedesmal kannst du dann abfragen, ob der dim Prozess unterbrochen werden soll

Hallo,

Du liest zuerst in der loop() den Sensor und gehst dann in messen() - schreib den Funktionsnamen doch lieber klein :slight_smile: - und schaltest die LEDs ab. Kann es sein, dass Licht der LEDs auf Deinen Sensor fällt, ehe Du die LEDs abschaltest?

Was passiert, wenn Du in der loop() nur messen() aufrufst und dort 1. die LEDs ausschaltest, 2. den Sensor ausliest und dann 3. Deine if-Abfrage machst?

Gruß (und guten Rutsch),
Ralf