Forum: Mikrocontroller und Digitale Elektronik Zu Arduio / DHT22 / switch / case


von Frage Zu Arduio / DHT22 / switch / case (Gast)


Lesenswert?

Hallo erst mal an alle.

Ich habe volgende frage wegen DHT22. geht um mein sketch. unzwar habe 
ich volgendes vor

daten aus lesen und auf ein lcd display anzeigen. geht schon
aus den daten die er aus gibt.

float h = dht.readHumidity();     //Luftfeuchte auslesen
float t = dht.readTemperature();  //Temperatur auslesen


also h und t sollen bei verschidenen fällen dinge geschehen zb grüne led 
an wen ein bereich von temperatur und luft stimmt rot wen nicht und so 
weiter

das problem was ich habe ist switch / case

momentan habe ich es durch if gelöst was aber umstäntlich ist wie ich 
finde und nicht gerade gut da es viele anweisungen gibt dafür.

switch (var) {
    case 1:
      //do something when var equals 1
      break;
    case 2:
      //do something when var equals 2
      break;
    default:
      // if nothing else matches, do the default
      // default is optional
    break;
  }

ist mir auch soweit klar wie es geht aber wen ich jetzt bei var t 
eingebe und die mir die temperatur ausgibt kann der switch nichts mit 
anfangen.

kann mir einer da weiter helfen bitte.




bisher der sketch noch im zimlichen roch zustand.

#include <LiquidCrystal.h>
#include "DHT.h"

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#define DHTPIN 8
#define DHTTYPE DHT22 //DHT11, DHT21, DHT22

DHT dht(DHTPIN, DHTTYPE);




int Arlarm = 13;
int Green = 10;
int Red = 9;
int Yellow = 7;

void setup()
{
  pinMode(Green, OUTPUT);    // Grün LED
  pinMode(Red, OUTPUT);     // Rot LED

  lcd.begin(16, 2);
  lcd.print("Initialisierung...");
  lcd.clear();
  Serial.begin(9600);
  Serial.println("DHT22 - Test!");

  dht.begin();
}

void loop()
{
  float h = dht.readHumidity();     //Luftfeuchte auslesen
  float t = dht.readTemperature();  //Temperatur auslesen

  if (isnan(t) || isnan(h)) // Prüfen ob eine gültige Zahl zurückgegeben 
wird. Wenn NaN (not a number) zurückgegeben wird, dann Fehler ausgeben.
  {
    Serial.println("DHT22 konnte nicht ausgelesen werden");
  }
  else

  if (((h > vonGefahrLuft) && (h < bisGefahrLuft)) && ((t > 
vonGefahrTemp) && (t < bisGefahrTemp)))
      {
       // Serial.print("Warnung: ");  // Alarm Zeile
       // digitalWrite(Red,HIGH);   // Für
       // delay(100);               // alarmton
       // digitalWrite(Red,LOW);    //
       // delay(100);               //
      }
      else
      {
       // Serial.print("Alles gut: "); // Alarm Zeile
       // digitalWrite(Arlarm,LOW);

        if (((t > vonOptimalTemp) && (t < bisOptimalTemp)) && ((h > 
vonOptimalLuft) && (h < bisOptimalLuft)))
        {
          digitalWrite(Green,HIGH);     // Anweisungsblock für wahr
          digitalWrite(Red,LOW);        // Anweisungsblock für wahr
        }
        else
        {
          digitalWrite(Red,HIGH);       // Anweisungsblock für falsch
          digitalWrite(Green,LOW);      // Anweisungsblock für falsch
        }
      }
    lcd.setCursor(0, 0);
    lcd.print(" Temp: ");
    lcd.print(t);
    lcd.print(" C");
    lcd.setCursor(0, 1);
    lcd.print(" Luft: ");
    lcd.print(h);
    lcd.print(" %");

   // Serial.print("Luftfeuchte: ");
   // Serial.print(h);
   // Serial.print(" %\t");
   // Serial.print("Temperatur: ");
   // Serial.print(t);
   // Serial.println(" C");




Liben dank schon mal

von Georg G. (df2au)


Lesenswert?

switch(var) möchte einen Integer als var haben. Dein t ist aber Float. 
Die Chance, das Auswahlkriterium exakt zu treffen geht gegen Null.

von Frage Zu Arduio / DHT22 / switch / case (Gast)


Lesenswert?

ok Hast du ein tipp wie es es dann besser lösen kan?

von Reiner W. (reiner_w)


Lesenswert?

Bin mir nicht sicher, ob es Sinn macht, den Sensor in dieser Form in der 
loop() auszulesen.
Wahrscheinlich willst du deine Aktionen nur einmal ausführen, wenn sich 
Werte im kritischen Bereich befinden.
In dem Fall solltest du ein Flag verwenden oder prüfen, ob sich die 
Werte überhaupt geändert haben.
Da der DHT22 eine Pause von 2sec zwischen den Auslesevorgängen benötigt, 
ist außerdem zu prüfen, ob die DHT22-Lib das berücksichtigt und falls 
ja, was zurückgegeben wird, wenn versucht wird dazwischen auszulesen.

von KingJulian (Gast)


Lesenswert?

Ich denke in diesem Fall war dein Ansatz mit den if-statements schon der 
richtige, switch case ist hier weniger geeignet.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.