Probleme mit loop()

Hi Leute,

also in Anlehnung an das ButtonChangeState wollte ich bei Zustandsänderung einer LED eine Aktion hervorrufen, dazu habe ich unten stehenden Code. Aber irgendwie wir brennerState==0 nicht erreicht. Das ist nur mal die loop anweisung. Das script an sich ist vollständig und RTC Sachen etc. laufen auch. Aber hat jemand eine Idee, was daran Falsch ist?

void loop(void)                                        // loop function runs over and over again    
 {
   //Serial.println(analogRead(lightPin));
   if(analogRead(lightPin) < 920)
     {brennerState = 1;}
   else{brennerState = 0;}
   
   
   if((brennerState != lastBrennerState)){

 //Ausgabe der Daten an den Server! Null zu Beginn
    if(brennerState == 1){
          digitalWrite(ledPin, HIGH);
          start_duration = now.unixtime(); 
          Serial.print("Brenner ist an ");
          Serial.println(start_duration);
          lastBrennerState = brennerState;  
    }

    if(brennerState == 0){
      digitalWrite(ledPin, LOW);
      //Endzeitpuknt
      end_duration = now.unixtime();
      duration = end_duration - start_duration;
      Serial.println("Brenner ist aus ");
      Serial.print("Gelaufen für: ");
      Serial.println(duration);
    //Zurücksetzen der Counter
      start_duration = 0;
      end_duration = 0;
      duration = 0;
    }
	}//End lastState

}

lastBrennerState = brennerState; wird nur bei brennerState == 1 gesetzt und sonst niemals.

Ach Mist, die Zeile ist schon drinnen. Die habe ich hier aus versehen mit den ganzen Kommentarzeilen rausgelöscht. Tut mir Leid. Sieht also so aus:

void loop(void)                                        // loop function runs over and over again    
 {
   //Serial.println(analogRead(lightPin));
   if(analogRead(lightPin) < 920)
     {brennerState = 1;}
   else{brennerState = 0;}
   
   
   if((brennerState != lastBrennerState)){

 //Ausgabe der Daten an den Server! Null zu Beginn
    if(brennerState == 1){
          digitalWrite(ledPin, HIGH);
          start_duration = now.unixtime(); 
          Serial.print("Brenner ist an ");
          Serial.println(start_duration);
          lastBrennerState = brennerState;  
    }

    if(brennerState == 0){
      digitalWrite(ledPin, LOW);
      //Endzeitpuknt
      end_duration = now.unixtime();
      duration = end_duration - start_duration;
      Serial.println("Brenner ist aus ");
      Serial.print("Gelaufen für: ");
      Serial.println(duration);
    //Zurücksetzen der Counter
      start_duration = 0;
      end_duration = 0;
      duration = 0;
lastBrennerState = brennerState
    }
	}//End lastState

}

lastBrennerState = brennerState fehlt der Strichpunkt. Es wäre nett daß Du sagst was nicht funktioniert und uns den Sketch so wie er ist gibst damit wir ihn kompilieren können. Grüße Uwe

laserbrain:
Ach Mist, die Zeile ist schon drinnen. Die habe ich hier aus versehen mit den ganzen Kommentarzeilen rausgelöscht.

Aha.

Du hast jetzt aber auch nirgends eine Kontrolle drin, ob brennerState so gesetzt wird und wechselt wie Du es möchtest. Wie wäre es denn, zur Kontrolle den LED-Status gleich entsprechend zu setzen, so daß Du siehst, ob der Wechsel so stattfindet wie Du es möchtest:

  if(analogRead(lightPin) < 920)
  {
    brennerState = 1;
    digitalWrite(ledPin, HIGH);
  }
   else
  {
    brennerState = 0;
    digitalWrite(ledPin, LOW);
  }

Und das Setzen der LED aus dem Rest des Codes herausnehmen?
Damit Du dann per optischer Kontrolle der LED tatsächlich sicher sein kannst, dass brennerState so wechselt wie es sein soll?

Danke für den Tipp. Das werde ich sehr gerne Versuchen und ist eine gute Idee.