Problem with Dht22

Mein problem ist, dass die sensor daten nicht wie gewünscht alle 5 sekunden sondern immer direkt nach einander ausgegeben werden sodass der sensor nich richtig messen kann. Weiß jemand wo mein Fehler liegt. Mir wurde vorgegeben , dass ich nicht mit dem delay Befehl arbeiten darf.

#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#include <rain.h>
#include <Arduino.h>

#define DHTPIN 12 // der sensor wird an pin 12 angeschlossen
#define DHTTYPE DHT22 // sensor ty DHT22
DHT dht(DHTPIN, DHTTYPE);

unsigned long Laufende_zeit1;
int Luftfeuchtigkeit = 0;

void setup()
{
Serial.begin(9600);
Laufende_zeit1 = millis();
}

void loop()
{

Luftfeuchtigkeit = dht.readHumidity();

if (Laufende_zeit1%2000 == 0);

{
Serial.print(“Luftfeuchtigkeit:”);
Serial.print(Luftfeuchtigkeit);
Serial.println("%");
}
}

if (Laufende_zeit1%2000 == 0);Oops

Außer dem falschen Semikolon wird Laufende_zeit1 nur einmal in setup (auf 0) gesetzt.

Ich dachte durch den =millis() befehl ist laufende_zeit1 immer gleich den aktuellen Millisekunden.

jukop:
Ich dachte durch den =millis() befehl ist laufende_zeit1 immer gleich den aktuellen Millisekunden.

Wenn du millis() da einsetzt wo es gebraucht wird, dann ja.

wo muss ich es denn einsetzten?

Z.B. statt deiner Variablen "Laufende_zeit1".

void loop()
{

Luftfeuchtigkeit = dht.readHumidity(); // sensor auslesen und wert unter "Luftfeuchtigkeit" speichern

if (millis()%2000 == 0)

{
Serial.print("Luftfeuchtigkeit:");
Serial.print(Luftfeuchtigkeit);
Serial.println("%");
}
}

jetzt passiert garnichts mehr

Dann ist in deiner if-Abfrage etwas falsch.

Meinst Du, dass Du immer genau bei einer durch 2000 teilbaren Millisekunde da lang kommst?

Gruß Tommy

Mein plan ist das immer wenn aktuelle Millisekunde durch 2000 Rest 0 ergibt die if schleife ausgeführt wird und die Luftfeuchtigkeit ausgegeben wird.
Ich wollte damit den delay() befehl umgehen.

Dein Plan scheint den Prozessor aber nicht zu interessieren. Schau Dir mal BlinkWithoutDelay an, wie Du das sicherer erreichen kannst.

Gruß Tommy

struct dDHT {
  byte readHumidity() {
    return random(101);
  }
} dht;

void setup() {
  Serial.begin(250000);
}

void loop() {
  static uint32_t lastPrint;
  uint32_t topLoop = millis();
  if (topLoop - lastPrint >= 2000) {
    lastPrint = topLoop;
    byte Luftfeuchtigkeit = dht.readHumidity();
    Serial.print(F("Luftfeuchtigkeit:"));
    Serial.print(Luftfeuchtigkeit);
    Serial.println(F("%"));
  }
}

jukop:
Mein plan ist das immer wenn aktuelle Millisekunde durch 2000 Rest 0 ergibt die if schleife ausgeführt wird und die Luftfeuchtigkeit ausgegeben wird.
Ich wollte damit den delay() befehl umgehen.

Erstens ist unsicher, ob du - bei länger laufender loop - genau die 2000er ms erwischt.Zweitens wird in dieser ms das if beliebig oft wahr, aber eigentlich willst du es doch nur einmal ausführen, oder?

Schau dir nochmal BlinkWithoutDelay an, und erkenne, warum es nicht um Blink sondern um WithoutDelay geht.

so ich habe jetzt die vorgehensweise aus aus demBlinkwithoutdelay code kopiert, allerdings ohne erfolg

#include <Arduino.h>

#define DHTPIN 12 // der sensor wird an pin 12 angeschlossen
#define DHTTYPE DHT22 // sensor ty DHT22
DHT dht(DHTPIN, DHTTYPE);

unsigned long previousMillis = 0;

int Luftfeuchtigkeit = 0;
const long interval = 5000;

void setup()
{
Serial.begin(9600);
}

void loop()
{
unsigned long currentMillis = millis();
Luftfeuchtigkeit = dht.readHumidity(); // sensor auslesen und wert unter “Luftfeuchtigkeit” speichern

if (currentMillis - previousMillis >= interval)

{
previousMillis = currentMillis;
Serial.print(“Luftfeuchtigkeit:”);
Serial.print(Luftfeuchtigkeit);
Serial.println("%");
}
}

ohne erfolg

?
Ich sehe keinen Fehler, außer dass die DHT Library fehlt. (‘DHT’ does not name a type)
#include <Arduino.h> kann man sich hingegen bei .ino Dateien sparen

hatte ich nur nicht mit kopiert , also steht schon im code

das problem hab ich nun gelöst. Vielen Dank.

Jetzt habe ich nur noch das problem das der Sensor nur Nan (not a number) als wert ausgibt.
Weiß da zufällig auch jemand woran das liegt?

jukop:
das problem hab ich nun gelöst. Vielen Dank.

Jetzt habe ich nur noch das problem das der Sensor nur Nan (not a number) als wert ausgibt.
Weiß da zufällig auch jemand woran das liegt?

Bei weiteren Problemen, immer den aktuellen Sketch posten.

Und setze den bitte in Code-Tags.

Verwende dazu die Schaltfläche </> oben links im Editorfenster.
Dazu den Sketch markieren und die Schaltfläche klicken, oder [code] davor und [/code] dahinter ohne *.

Damit wird dieser für alle besser lesbar, auch für mobile Geräte.

#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#include <rain.h>
#include <Arduino.h>

#define DHTPIN 12 // der sensor wird an pin 12 angeschlossen
#define DHTTYPE DHT22 // sensor ty DHT22
DHT dht(DHTPIN, DHTTYPE);

unsigned long previousMillis = 0;

float Luftfeuchtigkeit;
const long interval = 5000;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  unsigned long currentMillis = millis();
  Luftfeuchtigkeit = dht.readHumidity();  // sensor auslesen und wert unter "Luftfeuchtigkeit" speichern
  
 if (currentMillis - previousMillis >= interval)

  { 
  previousMillis = currentMillis;
  Serial.print("Luftfeuchtigkeit:");
  Serial.print(Luftfeuchtigkeit);
  Serial.println("%");
  
  
  
  }
}

das Problem ist, dass immer nan als ausgegebene Luftfeuchtigkeit angezeigt wird.