Temperatur- und Luftfeuchtigkeits-Sensor-Kombination
Der Code ist ziemlich komplex, weil die Werte für Temperatur und Feuchtigkeit ausgelesen müssen!
Arduino
// http://linksprite.com/wiki/index.php5?title=Advanced_Sensors_Kit_for_Arduino
int dht_dpin = A0;
byte bGlobalErr;
byte dht_dat[5];
void setup() {
InitDHT();
Serial.begin(9600);
delay(300);
Serial.println("Luftfeuchtigkeit und Temperatur");
delay(700);
}
void loop() {
ReadDHT();
switch (bGlobalErr) {
case 0:
Serial.print("Aktuelle Luftfeuchtigkeit = ");
Serial.print(dht_dat[0], DEC);
Serial.print(".");
Serial.print(dht_dat[1], DEC);
Serial.print("% ");
Serial.print("Temperatur = ");
Serial.print(dht_dat[2], DEC);
Serial.print(".");
Serial.print(dht_dat[3], DEC);
Serial.println("C");
break;
case 1:
Serial.println("Error 1: DHT start condition 1 not met.");
break;
case 2:
Serial.println("Error 2: DHT start condition 2 not met.");
break;
case 3:
Serial.println("Error 3: DHT checksum error.");
break;
default:
Serial.println("Error: Unrecognized code encountered.");
break;
}
delay(800);
}
void InitDHT() {
pinMode(dht_dpin, OUTPUT);
digitalWrite(dht_dpin, HIGH);
}
void ReadDHT() {
bGlobalErr = 0;
byte dht_in;
byte i;
digitalWrite(dht_dpin, LOW);
delay(20);
digitalWrite(dht_dpin, HIGH);
delayMicroseconds(40);
pinMode(dht_dpin, INPUT);
//delayMicroseconds(40);
dht_in = digitalRead(dht_dpin);
if (dht_in) {
bGlobalErr = 1;
return;
}
delayMicroseconds(80);
dht_in = digitalRead(dht_dpin);
if (!dht_in) {
bGlobalErr = 2;
return;
}
delayMicroseconds(80);
for (i = 0; i < 5; i++)
dht_dat[i] = read_dht_dat();
pinMode(dht_dpin, OUTPUT);
digitalWrite(dht_dpin, HIGH);
byte dht_check_sum =
dht_dat[0] + dht_dat[1] + dht_dat[2] + dht_dat[3];
if (dht_dat[4] != dht_check_sum)
{
bGlobalErr = 3;
}
}
byte read_dht_dat() {
byte i = 0;
byte
result = 0;
for (i = 0; i < 8; i++) {
while (digitalRead(dht_dpin) == LOW);
delayMicroseconds(30);
if (digitalRead(dht_dpin) == HIGH)
result |= (1 << (7
-
i));
while (digitalRead(dht_dpin) == HIGH);
}
return result;
}