Zu Arduio / DHT22 / switch / case

Gast #4816928
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
#4817077
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.