Pages: [1]   Go Down
Author Topic: Probleme mit loop()  (Read 454 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 62
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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

}
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 146
Posts: 3040
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Jr. Member
**
Karma: 0
Posts: 62
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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

}
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 266
Posts: 21665
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 146
Posts: 3040
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
  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?
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 62
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

Pages: [1]   Go Up
Jump to: