Go Down

Topic: Probleme mit loop() (Read 498 times) previous topic - next topic

laserbrain

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?

Code: [Select]
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

}

jurs

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

laserbrain

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:

Code: [Select]
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

}

uwefed

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

jurs


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:

Code: [Select]

  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?

laserbrain

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


Go Up