Variable in Funktion setzen funktioniert nicht

Hallo, ich habe die unten stehende Funktion geschrieben.
Diese rufe ich in Main auf und übergebe die nötigen Parameter. Dieses funktioniert auch alles. Allerdings springt er in die erste if, wenn temp0 größer schwellwertStart1 ist und hm0 ist gleich false. Ist auch alles richtig, aber der Hilfsmerker hm0 wird nicht gesetzt.

Warum ist dieses so?

Hier mein Code:

float auswertungSensoren(float temp0, const float schwellwertStart1, const float schwellwertStopp1, unsigned long start0, unsigned long stopp0)
{
  bool hm0, bool hm0_1, bool hm0_2;
  float pruefungZeit;
  //Pruefen ob Temperatur ueber Schwellwert Start
  if (temp0 >= schwellwertStart1 && hm0 == false)
  {
    //Aktuelle Zeit zuweisen
    start0 = millis();
    hm0 = true;
  }
  //Pruefen ob Temperatur ueber Schwellwert Stopp
  if (temp0 >= schwellwertStopp1 && !hm0_1)
  {
    //Aktuelle Zeit zuweisen
    stopp0 = millis();
    hm0_1 = true;
  }
  //wenn ueber beide Schwellwerte dann Zeit ausgeben
  if (hm0 == true && hm0_1 == true && !hm0_2)
  {
    //Zeit berechnen
    pruefungZeit = ((stopp0 - start0) / 1000.0);
    hm0_2 = true;
    start = false;
    return pruefungZeit;
  }
}

Danke euch:-)

Lokale Variablen haben beim Eintritt in eine Funktion zufällige Inhalte.
Wenn Du Werte vorgeben willst, dann musst Du das initialisieren.
Beim Verlassen der Funktion werden die Werte der lokalen Variablen vergessen.

Gruß Tommy

Heißt also ich muss die Hilfsmerker außerhalb deklarieren?

Deklariere die Hilfsmerker als static bool. Dann bleibt deren Wert auch nach Verlassen der Funktion erhalten und stehen bei einem ernenuten Aufruf der Funktion zur Verfügung.

Aber sie stehen dann auch nur IN der Funktion zur Verfügung.

Was programmierst Du?

Arduino IDE versteckt die main Funktion.

Grüße Uwe

Doch, der wird gesetzt.

Aber die Funktion kann nicht kompiliert werden.

Und dann gibt es da soviele Baustellen, die - wenn das berichtigt ist - das Du Dir erstmal die Warnungen alle ansehen solltes.
DATEI - VOREINSTELLUNGEN - Ausführliche Ausgabe während Kompilierung [x]
Und da drunter Compilerwarnungen: ALLE

Da hat @my_xy_projekt recht. Die Kommata sind falsch (verwende ; ) und die Variabe „start“ in der viertletzten Zeile gibt es auch nicht. Bzw. wenn diese global definiert wurde, wäre das sehr unschön.

Das ist das geringste Übel.
Aber wenn die Bedingung zu dem Funktionsblock nicht erfüllt ist, was ist dann der Rückgabewert? :crazy_face:
Und wenn ich die übergebenen Var's mit millis() überschreibe, brauch ich die auch nicht übergeben...
Wie gesagt gaaanz viele Baustellen...

Du hast es im Blick… so genau habe ich noch nicht geschaut.

Im Gegensatz zu gestern habe ich heute einen größeren Monitor. :wink:

Dafür muss man schon ganz besondere Gründe haben, finde ich!

Brutal formuliert:
Gründe, welche über Dummheit und Faulheit hinaus gehen.

Sanfter formuliert:
Es gibt Alternativen.
Nutze sie!

Hat er nicht!
Das Komma ist an der Stelle durchaus genehmigt.
Nicht schön, geht aber (Edit: Bei richtiger Verwendung der Datentypen) ohne Murren durch und tut was es soll/kann.

Das ist zwar richtig, kann einen aber nicht daran hindern eine eigene main() Funktion zum Einsatz zu bringen.
Was mich eher wundert, ist:
Dass millis() dann noch funktioniert.
Das dürfte nämlich nicht sein.

sketch_aug22a:15:13: error: expected unqualified-id before 'bool'
   bool hm0, bool hm0_1, bool hm0_2;
             ^~~~

editiert:

sketch_aug22a:15:25: error: expected unqualified-id before 'bool'
   bool hm0; bool hm0_1, bool hm0_2;
                         ^~~~

geht das evtl. in späteren C++ Versionen?

Ok, in dem Punkt..... habt ihr (beinahe) recht!

Dieses ist dagegen durchaus gültig.
bool hm0, hm0_1, hm0_2;

Es ist somit nicht das Komma falsch, sondern die Typeangabe.

Und Brille geputzt :joy:

Das ist nicht beinahe.

Ej komm.. ich hab noch 0.25 Dioptrien drauf legen müssen... Das wird zum Problem, wenn das so weiter geht.

Habe ich das angezweifelt?
Nein!

Die Anwendung der Kommata ist falsch, sonst würde der Kompiler nicht meckern.
Du wirst wissen, warum Du nacheditiert hast.

Ja, das weiß ich!
Zur Abschaffung des Missverständnisses, sogar nochmal editiert!

Also, tue bitte so, als hättest du gewonnen!
(wenn es dir dann besser geht)

bool hm0, bool hm0_1, bool hm0_2;

Aber Strichpunkte statt den Kommas hätten auch funktioniert. Also stimmt auch die Aussage daß die Kommas falsch sind.

Einigen wir uns daß entweder das eine (Komma) oder das andere(mehrfache Typenangebe) falsch ist.

Grüße Uwe