Hilfe bei einer Bedingung : wenn , dann

Hallo,
nachdem ich so gute Erfahrungen hier gesammelt habe, möchte ich euch nochmal um Rat und Hilfe bitten. Es ist bestimmt für den einen oder anderen eine Kleinigkeit. :slight_smile:

Also, ich habe als Bespiel einen DHT22 , welcher alle 2 Sekunden abgefragt wird.
Da der DHT doch gerne mal ein "nan" bringt und ich mit isnan auch schon gearbeitet habe möchte ich gerne einen anderen Versuch starten.

Um es ganz klar im Vorfeld zu sagen, es geht mir nicht um den DHT22 oder das "nan" oder die 2 Sekunden Abfrage....! Dies dient nur der Beschreibung.

Was ich gerne in Erfahrung bringen, lernen möchte ist, wie ich die folgende Bedingung einbringen bzw. umsetzen kann.

Ich möchte, erst wenn alle 4 Werte ( SaveDHT2, bis -8 ) einmal als Variable gespeichert wurden, erst dann soll der Mittelwert (DHTdurchschnitt) gültig sein, davor nicht.
Also so irgendwas wie .. Wenn alle 4 SaveDHT "true" dann Mittelwert gültig.

if (T5 >= -20  || T5 <=50 && DHTcout == 2)
      SaveDHT2 = T5;
      
if (T5 >= -20  || T5 <=50 && DHTcout == 4)
      SaveDHT4 = T5;
      
if (T5 >= -20  || T5 <=50 && DHTcout == 6)
      SaveDHT6 = T5; 
       
if (T5 >= -20  || T5 <=50 && DHTcout == 8)
      SaveDHT8 = T5;
         
DHTdurchschnitt = (SaveDHT2 + SaveDHT4 + SaveDHT6 + SaveDHT8)

Ich hoffe ich konnte das so einigermaßen beschreiben, was ich gerne möchte.
Immer wieder habe ich so ähnliche Fälle, weis aber keine schönen Weg dies umzusetzen.

Gruss Rainer

Als kleiner Denkansatz zur Vereinfachung/Verkürzung: Das (oben) ist immer gleich, könnte man zusammenfassen.

Das weiss ich nicht.
Mein Verständnis:

bool allesRichtig = true;

if (T5 >= -20  || T5 <= 50 && DHTcout == 2)
{
  SaveDHT2 = T5;
}
else
{
  allesRichtig = false;
}
if (T5 >= -20  || T5 <= 50 && DHTcout == 4)
{
  SaveDHT4 = T5;
}
else
{
  allesRichtig = false;
}

if (T5 >= -20  || T5 <= 50 && DHTcout == 6)
{
  SaveDHT6 = T5;
}
else
{
  allesRichtig = false;
}

if (T5 >= -20  || T5 <= 50 && DHTcout == 8)
{
  SaveDHT8 = T5;
}
else
{
  allesRichtig = false;
}

if (allesRichtig)
{
  DHTdurchschnitt = (SaveDHT2 + SaveDHT4 + SaveDHT6 + SaveDHT8)
}

Möchtest Du selbst erkunden, was ich damit meine oder soll ich es erklären?

selber .... dann verstehe ich es nacher :slight_smile:

1 Like

Hallo,

haben die DHTcout eine besondere Bedeutung?

Wenn nicht, kannst du für eine Mittelwertbildung x Messungen machen die du aufaddierst, dabei mitzählst wieviel x Messungen du aufaddiert hast und dann die Summe durch die Anzahl der Messungen teilst. Dann kannst du flexibel bestimmen nach wieviel Messungen der Mittelwert gebildet werden soll.

Hmmm , ist ja echt einfach...
Das mit dem "bool" kannte ich nicht.
Super, ich danke dir my_xy_projekt, du hast genau verstanden was ich meinte und suchte ..... !

Und wieder was von euch gelernt :slight_smile:

PS: ..Das mit dem DHTcount ist nur ein Beispiel für meine Frage....
Normal mache ich sowas über Array....
Aber meine Frage ohne was an Beispiel zu haben , fand ich eher unglücklich

So ein Forum ist eine feine Sache und Ihr, die immer wieder helfen auch .
Danke ... so macht es echt Spass und Stück für Stück lernt man was dazu.
Freue mich echt....

Na... das ist eigentlich gar nicht so schwer.
Da Du es übernommen hast, war es wohl richtig.
Von daher versuche ich es mal zu erklären:

Vor dem Eintritt der Abfragen setze ich eine Variable auf true.
Sobald eine der nachfolgenden Bedingungen NICHT passt, wird die Variable auf false gesetzt.
Nur wenn die Variable am Ende aller Bedingungen noch immer true ist, wird der nachfolgende Code ausgeführt.

Hinweis für die Nachwelt:
Die Bezeichnung einer Variablen sollte zum Inhalt passen.
allesRichtig mit false zu initialisieren wäre auch möglich, spätestens bei der Auswertung:
if (allesRichtig) fällt das aber auf die Füße :wink:
Na denne.

:pray: :+1: :star: :star: :star: :star: :star: