Ich habe mir ein Sketch zusammen geraubt.
Es werden Temperatur und Luftfeuchte mit DHT22 ausgelesen und ich messe eine Spannung.
Später soll noch Strom gemessen werden.
Nun will ich mit “Millis” die Temperatur und Luftfeuchte nur alle 60 Sekunden auslesen.
Die Spannung und später der Strom sollen aber jede Änderung sofort anzeigen.
Leider wirkt sich aber die Verzögerung auch auf die Spannungsmessung aus.
Ich hänge mal den Sketch hier an. Vielleicht kann ja mal einer drüber schauen und mir meinen Fehler zeigen.
/
*https://www.arduinoforum.de/arduino-Thread-Tutorial-Temperatur-Luftfeuchte-messen-und-auf- LCD-ausgeben
https://github.com/adafruit/DHT-sensor-library (Achtung aus der Libray muss DHT_U.cpp und DHT_U.h
entfernt werden.
*/
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#include <DHT.h>
int analogInput = A1; // Spannung wird aus PIN A1 ausgelesen
float vout = 0.0;
float vin = 0.0;
float R1 = 100000.0; // Widerstandswert R1 (100K)
float R2 = 10000.0; // Widerstandswert R2 (10K)
int value = 0;
#define DHTPIN A0 // DHT Sensor wird aus PIN A0 ausgelesen
#define DHTTYPE DHT22 // DHT Type wird auf DHT22 festgelegt
DHT dht22(DHTPIN, DHTTYPE); // DHTPIN und DHTTYE in dht22 definiert
unsigned long previousMillis = 0; // speichert wie viele Sekunden seit der letzten Änderung vergangen sind
unsigned long interval = 5000; // Interval zwischen zwei Änderungen
void setup()
{
pinMode(analogInput, INPUT);
Serial.begin(9600); // Serielle Ausgabe beginnen mit: 9600 baud
lcd.begin(20, 4); // LCD festlegen
Serial.println("DHT22 Serielle Ausgabe"); // Begrüßung beim Aufruf vom seriellen Monitor
dht22.begin(); // Auslesen des DHT22 beginnt
}
void loop()
{
value = analogRead(analogInput); // Werte am analogen Pin lesen
vout = (value * 5.0) / 1024.0;
vin = vout / (R2 / (R1 + R2));
/* es wird kontrolliert, ob die Zeit für die Pause schon abgelaufen ist.
Wenn die Zeitdifferenz zwischen dem letzten Abspeichern und der aktuellen Zeit größer als das
Intervall ist, so wird die nachfolgende Funktion ausgeführt.
*/
if (millis() - previousMillis > interval) {
previousMillis = millis(); // aktuelle Zeit abspeichern
float t = dht22.readTemperature(); // Die Temperatur wird vom DHT22 ausgelesen, Wert in "t" schreiben
float h = dht22.readHumidity(); // Die Luftfeuchte wird vom DHT22 ausgelesen, Wert in "h" schreiben
t = t - 0.5; // z.B. 0,5 °C abziehen wenn Sensor ungenau
Serial.print("Temperatur: "); // Temperatur im Seriellen Monitor ausgeben
Serial.print(t); // Temperature im Seriellen Monitor ausgeben
Serial.print(" C\t"); // Platzhalter zwischen Temperatur u. Luftfeuchte im Seriellen Monitor
Serial.print("Luftfeuchte: "); // Luftfeuchte im Seriellen Monitor ausgeben
Serial.print(h); // Humidity im Seriellen Monitor ausgeben
Serial.println(" %"); // % im Seriellen Monitor ausgeben
lcd.setCursor(0, 0); // Anfang auf Stelle 0, Zeile 0 setzen
lcd.print("Temp. :"); // Temp. : auf LCD ausgeben
lcd.setCursor(9, 0); // Anfang auf Stelle 9, Zeile 0 setzen
lcd.print(t, 1); // Wert aus "t" ausgeben (Temperatur)
lcd.setCursor(15, 0); // Anfang auf Stelle 15, Zeile 0 setzen
lcd.print("C"); // C auf LCD ausgeben
lcd.setCursor(0, 1); // Anfang auf Stelle 0, Zeile 1 setzen
lcd.print("Luftf.:"); // Luft.: auf LCD ausgeben
lcd.setCursor(9, 1); // Anfang auf Stelle 9, Zeile 1 setzen
lcd.print(h, 1); // Wert aus "h" ausgeben (Luftfeuchtigkeit)
lcd.setCursor(15, 1); // Anfang auf Stelle 15, Zeile 1 setzen
lcd.print("%"); // % auf LCD ausgeben
lcd.setCursor(0, 2);
lcd.print("Spannung = ");
lcd.print(vin);
lcd.setCursor(15, 2);
lcd.print(" Volt");
}
}
Schon mal Danke