Variablentyp für DHT22??

Hallo,
ich möchte 10 x DHT22 auslesen. Der Code funktioniert, ist aber nicht schön bzw schreibaufwendig.
Ich möchte die Sensoren in einer Schleife auslesen und mir fehlt ein Variablentyp für ein Array:

Original:

float t[10];
t[i] = dht1.readTemperature();

was muss ich ändern, damit ich statt der " 1 " ein " i " eintragen kann?

Ich nutze die Bibliothek: DHT sensor library by Adafruit

Hier der Code für 2 Sensoren zum testen:

//http://forum.arduino.cc/index.php?topic=256451.0
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain

// DHT_dual_test
// Demonstrates multiple sensors
// Modified sketch by DIY-SciB.org

#include <DHT.h>
//======================================================================
//Pins der Sensoren angeben:
#define DHT1PIN 8   // what pin we're connected to
#define DHT2PIN 9

// Uncomment whatever type you're using!
//#define DHT1TYPE DHT11   // DHT 11
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
#define DHT2TYPE DHT22  // DHT 22  (AM2302)

// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

//======================================================================
//Sensoren angeben:
DHT dht1(DHT1PIN, DHT2TYPE);
DHT dht2(DHT2PIN, DHT2TYPE);

void setup() {
  Serial.begin(115200);
  Serial.println("DHTxx test!");
  //======================================================================
  //Sensoren starten:
  dht1.begin();
  dht2.begin();
}

//======================================================================
//======================================================================
void loop() {
  //======================================================================
  //======================================================================
  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)

float h[10];
float t[10];


        for (int i = 1; i < 2; i++) {
          
      
      


      
  h[1] = dht1.readHumidity();
  t[1] = dht1.readTemperature();
  delay(250);
  h[2] = dht2.readHumidity();
  t[2] = dht2.readTemperature();
  //delay(250);
  // check if returns are valid, if they are NaN (not a number) then something went wrong!
  if (isnan(t[1]) || isnan(h[1])) {
    Serial.println("Failed to read from DHT #1");
  } else {
    Serial.print("Humidity 1: ");
    Serial.print(h[1]);
    Serial.print(" %\t");
    Serial.print("Temperature 1: ");
    Serial.print(t[1]);
    Serial.println(" *C");
  }
  if (isnan(t[2]) || isnan(h[2])) {
    Serial.println("Failed to read from DHT #2");
  } else {
    Serial.print("Humidity 2: ");
    Serial.print(h[2]);
    Serial.print(" %\t");
    Serial.print("Temperature 2: ");
    Serial.print(t[2]);
    Serial.println(" *C");
  }
  Serial.println();
  } //ENDE for Schleife
}

Du könntest z.B.

dht[i].readTemperature()

verwenden.

Edit:
Code-Tags hinzugefügt.

Wie immer ist die Variablendefinition erstmal das wichtigste.

DHT dht[] = {DHT(DHT1PIN, DHT22), DHT(DHT2PIN, DHT22)};
float t[2];

dann kann man
for (byte i = 0; i < 2; i++)  t[ i ] = dht[ i ].readTemperature();
verwenden.

michael_x:
Wie immer ist die Variablendefinition erstmal das wichtigste.

Sehr gut, vielen Dank! :slight_smile:
Jetzt läuft es. Hier der vollständige Code:

//Mehrere DHT22 mit Arduino einlesen
//Original von: http://forum.arduino.cc/index.php?topic=256451.0
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain

// DHT_dual_test
// Demonstrates multiple sensors
// Modified sketch by DIY-SciB.org

#include <DHT.h>

// Uncomment whatever type you're using!
//#define DHT1TYPE DHT11   // DHT 11
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
#define DHT2TYPE DHT22  // DHT 22  (AM2302)

// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

//======================================================================
//Pins der Sensoren angeben:
#define DHT1PIN 8   // what pin we're connected to
#define DHT2PIN 9



DHT dht[] = {DHT(DHT1PIN, DHT2TYPE), DHT(DHT2PIN, DHT2TYPE)};



void setup() {
  Serial.begin(115200);
  Serial.println("DHTxx test!");
  //======================================================================
  //Sensoren starten:
  dht[0].begin();
  dht[1].begin();

  
}

//======================================================================
//======================================================================
void loop() {
  //======================================================================
  //======================================================================
  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)

  float h[10]; //Anzahl der angeschlossenen Sensoren eingeben
  float t[10]; //Anzahl der angeschlossenen Sensoren eingeben


  for (int i = 0; i < 2; i++) { //Anzahl der angeschlossenen Sensoren eingeben



    h[i] = dht[i].readHumidity();
    t[i] = dht[i].readTemperature();
    delay(250);



    // check if returns are valid, if they are NaN (not a number) then something went wrong!
    if (isnan(t[i]) || isnan(h[i])) {
      Serial.print("Failed to read from DHT #"); Serial.println(i);
    } else {
      Serial.print("Humidity "); Serial.print(i); Serial.print(": ");
      Serial.print(h[i]);
      Serial.print(" %\t");
      Serial.print("Temperature "); Serial.print(i); Serial.print(": ");
      Serial.print(t[i]);
      Serial.println(" *C");
    }

    
  } //ENDE for Schleife
  Serial.println();
}

Auch im Setup kannst du

dht[i].begin();

In einer Schleife abwickeln.

float h[10]; //Anzahl der angeschlossenen Sensoren eingeben

Stimmt der Kommentar? :stuck_out_tongue: :wink:

naja...der kommentar ist nicht optimal gewählt :confused:
Auf jeden Fall benötige ich bei 10 Sensoren den Wert "10" :wink:
Natürlich bei "t" genauso... und einigen anderen auch...

Ja.

Wie immer ist die Variablendefinition erstmal das Wichtigste

:slight_smile:

Dann kannst du vorher noch eine Konstante
const byte SENSORCOUNT=10; // oder ein anderer Name deiner Wahl
definieren und die überall konsequent verwenden, wo du bisher 10 oder manchmal 2 verwendet hast.