Hallo, da ich noch anfänger bin steh ich gerade vor dem problem das ich die Sensoren DHT22 und DS18B20 nicht gleichzeitig auf meinem Display angezeigt bekomme. Ich habe schon das Netz durchgeforstet aber bekomme keine Antwort dadrauf. Hat jemand eine Lösung für mich? ich kann beides separat anzeigen lassen aber eben nicht zusammen.
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht22(DHTPIN, DHTTYPE);
#include <Time.h> Bibliotheken laden
#include <Wire.h>
#include <OneWire.h>
#include <DS1307RTC.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
int DS18S20_Pin = 3; //DS18S20 Signal pin on digital 3
//Temperature chip i/o
OneWire ds(DS18S20_Pin); // on digital pin 3
void setup()
{
lcd.begin(20, 4); //Im Setup wird angegeben, wie viele Zeichen und Zeilen werwendet werden.
Serial.begin(9600); //Öffnet den seriellen Port und legt die Baud Rate (9600) für die serielle Übertragung fest.
setSyncProvider(RTC.get); //Dies ist die Funktion um die Zeit- und Datumsangabe von der RTC zu bekommen
dht22.begin();
lcd.backlight();
}
void loop()
{
delay(100); //Zwei Sekunden Vorlaufzeit bis zur Messung (der Sensor ist etwas träge)
float tl = dht22.readTemperature(); // Die Temperatur wird vom DHT22 ausgelesen, Wert in "tl" schreiben
float h = dht22.readHumidity(); // Die Luftfeuchte wird vom DHT22 ausgelesen, Wert in "h" schreiben
float temperature = getTemp();
Serial.print("Temperatur: "); // Ausgabe im Seriellen Monitor
Serial.print(tl); // Ausgabe im Seriellen Monitor
Serial.print(" C\tl"); // Ausgabe im Seriellen Monitor
Serial.print("Luftfeuchte: "); // Ausgabe im Seriellen Monitor
Serial.print(h); // Ausgabe im Seriellen Monitor
Serial.println(" %"); // Ausgabe im Seriellen Monitor
Serial.print(hour()); //Serial.print ist der Befehl etwas im seriellen Monitor anzuzeigen (Stunde, Minute, Sekunde, Leerzeichen, Tag, Leerzeichen, usw.)
printDigits(minute()); //bei den Minuten und Sekunden wird der Befehl
printDigits(second()); //printDigits angegeben welcher am Ende des Codes noch festgelegt wird.
Serial.print(" ");
Serial.print(day());
Serial.print(" ");
Serial.print(month());
Serial.print(" ");
Serial.print(year());
Serial.println();
delay(1000);
//TEMP DHT22
lcd.setCursor(0, 1);
lcd.print("Temp.Luft:");
lcd.setCursor(11, 1);
lcd.print(tl);
lcd.setCursor(17, 1);
lcd.print("C");
lcd.setCursor(0, 2);
lcd.print("Luftf.:");
lcd.setCursor(11, 2);
lcd.print(h);
lcd.setCursor(17, 2);
lcd.print("%");
//TEMP DS18B20
lcd.setCursor(0, 3);
lcd.print("Temp.Was:");
Serial.println(temperature);
lcd.setCursor(10, 3);
lcd.print(temperature);
lcd.setCursor(17, 3);
lcd.print("C");
//UHR
lcd.setCursor(1, 0); //setCursor gibt an wo der Text beginnen soll. In diesem Fall beim dritten Zeichen in der ersten Reihe.
lcd.print(hour()); //Hier soll jetzt die Uhrzeit angezeigt werden, also „hour“ „:“ „minute“ usw..
lcd.print(":");
lcd.print (minute());
lcd.print(":");
lcd.print(second());
lcd.print(" ");
lcd.setCursor(10, 0); // Der nächste „Text“ soll nun beim zweiten Zeichen in der zweiten Reihe beginnen.
lcd.print(day()); // Das Datum soll nun als
lcd.print("."); // „Tag“, „.“ „Monat“ usw. angegeben werden.
lcd.print(month());
lcd.print(".");
lcd.print(year());
}
void printDigits(int digits) //In diesem Abschnitt wird festgelgt, dass bei Zahlen <10 im seriellen Monitor automatisch eine 0 vor den Ziffern angezeigt wird. Das gilt nur für den seriellen Monitor und nicht für LCD Display.
{
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);
}
Uhrund2temptest.ino (4.43 KB)