hallo leute da bin ich mal wieder und hab nen kleinens problem seit langer zeit^^
da ich 6 von dht22 sensoren besitze und die betreiben will.. habe ich die lib von adafruit genommen die es mir ganz einfach ermöglicht mehrere sensoren anzusprechen:
bei der lib von: Arduino Playground - DHTLib kann ich erkennen das sie schneller arbeitet als die von adafruit! doch leider verstehe ich nicht wie ich mehrere sensoren auslesen kann.
kann mir da einer ein beispiel mit 2 sensoren machen?
Sobald Du das nächste Mal liest (mittels read22()-Methode), werden die Werte überschrieben mit den neu gelesenen Werten (die von einen anderen Sensor an einem anderen Pin kommen können).
Der DHT22_PIN war als Beispiel für irgendeinen Pin angeführt. Dieser Platzhalter muss einfach für jeden der 6 Sensoren angepasst werden. Da die Sensoren keine Adressen besitzen, muss für jeden Sensor ein eigener Pin eingesetzt werden.
was muss ich da schreiben wenn ich den 4. sensor anzeigen lassen will?
DHT.humidity enthält den Wert der letzten Abfrage. Vor der nächsten Abfrage musst Du ihn also sichern.
Wenn Du nacheinander alle Sensoren abprüfen willst, dann mach es z.B. so:
#define DHT22_PIN1 5 // Sensor 1 an Pin 5
#define DHT22_PIN2 6 // Sensor 2 an Pin 6
#define DHT22_PIN3 7 // Sensor 3 an Pin 7
#define DHT22_PIN4 8 // Sensor 4 an Pin 8
#define ERR_VAL -1000.0
dht DHT;
double hum1;
double hum2;
double hum3;
double hum4;
double temp1;
double temp2;
double temp3;
double temp4;
void setup()
{
...
}
void loop()
{
readSensors();
// Die Werte der Sensoren sind nun in den Variablen gespeichert
// und können weiterverarbeitet werden
...
}
void readSensors()
{
// Alle vier Sensoren auslesen und Werte speichern
if (DHT.read22(DHT22_PIN1) = DHTLIB_OK)
{
hum1 = DHT.humidity;
temp1 = DHT.temperature;
}
else
{
hum1 = ERR_VAL;
temp1 = ERR_VAL;
}
if (DHT.read22(DHT22_PIN2) = DHTLIB_OK)
{
hum2 = DHT.humidity;
temp2 = DHT.temperature;
}
else
{
hum2 = ERR_VAL;
temp2 = ERR_VAL;
}
if (DHT.read22(DHT22_PIN3) = DHTLIB_OK)
{
hum3 = DHT.humidity;
temp3 = DHT.temperature;
}
else
{
hum3 = ERR_VAL;
temp3 = ERR_VAL;
}
if (DHT.read22(DHT22_PIN4) = DHTLIB_OK)
{
hum4 = DHT.humidity;
temp4 = DHT.temperature;
}
else
{
hum4 = ERR_VAL;
temp4 = ERR_VAL;
}
}
Eleganter im Sinne der Objekt-Orientierten Programmierung wäre sicher, pro Pin ein dht Objekt zu haben, aber so ist es vermutlich kompakter...
Wenn ich das Adafruit Beispiel richtig lese, ist das dort auch so gemacht:
Die Library dort heisst DHT.h und definiert die Klasse DHT.
Von dieser Klasse wird für jeden Pin ein Objekt gebildet:
@AndiIsl:
Wenn ich mir den Thread nochmal von vorne anschaue, sehe ich, dass du doch so angefangen hast, mit der Adafruit library und 6 Objekten.
Ich finde auch, dass das übersichtlicher ist, als bei einem Objekt dynamisch die Pin Nummer zu übergeben, wie es wohl die Playground Version vorsieht.
Aber die adafruit Version ist ja " einfach zu langsam! " oder ?
Da hast du nun 3 Möglichkeiten:
A) Adafruit ist schnell genug für 6 * Feuchte und Temperatur
B) du nimmst MaFu's Beispiele für die playground Variante
C) du vergleichst beide libraries und findest raus, was an der einen oder anderen dir nicht gefällt, oder ob sie sich eigentlich gar nicht wesentlich unterscheiden, und baust dir dann was eigenes ( wobei es da wieder zig Unter-Varianten gibt )
das terrarium soll komplett gesteuert werden! luftfeuchte, licht, sonnen aufgang und untergang, alles online abgespeichert und auch die sollwerte von einer sql datenbank werden geholt..
auch die kleinen aufzuchtbecken werden somit gesteuert...
Na gut, 3*6 Werte pro Tag war etwas provozierend, zugegeben.
Aber selbst das beeindruckende wetterpanel - Beispiel kommt mit 8 ( 3h ) Datensätzen pro Tag aus.
Ob ein einzelner Sesnorwert nun in 20 msec gemessen wird oder fast 1 sec braucht, ist eigentlich egal, aber grundsätzlich schon interessant...