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.