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;
}
}
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.
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.
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?
Und wenn ich die übergebenen Var's mit millis() überschreibe, brauch ich die auch nicht übergeben...
Wie gesagt gaaanz viele Baustellen...
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.