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
switch(var) möchte einen Integer als var haben. Dein t ist aber Float. Die Chance, das Auswahlkriterium exakt zu treffen geht gegen Null.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.