//Hier werden die notwendigen Bibliotheken für die I2C-Kommunikation,
// das LCD-Display und das RTC-Modul importiert.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <DHT.h>
#define DHTPIN 4
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
#include <TM1637.h>
int CLK = 5;
int DIO = 6;
TM1637 SSDx4(CLK, DIO);
// Es werden Objekte für die DS1307 RTC und das I2C-LCD-Display erstellt.
// lcd mit der Adresse 0x27, 16 Spalten und 2 Zeilen initialisiert.
RTC_DS1307 rtc;
LiquidCrystal_I2C lcd(0x27, 20, 4);
//#include <Thermistor.h>
#include <NTC_Thermistor.h>
int NTC = A0;
#define Referenzwiderstand 10000 // Widerstandswert des Widerstandes der mit dem NTC in Reihe geschaltet wurde
#define Nominalwiderstand 10000 // Widerstandswert des NTC bei Normaltemperatur
#define Nominaltemperatur 25 // Temperaturwert, bei dem der NTC 10kOhm hat
#define BWert 3950 // Beta Koeffizient (zu finden im Datenblatt des NTC)
Thermistor* thermistor;
void setup() {
// Initialisiere die serielle Kommunikation für Debug-Ausgaben
Serial.begin(9600);
// Nun wird der Sensor mit den spezifischen Daten initialisiert
thermistor = new NTC_Thermistor(NTC, Referenzwiderstand, Nominalwiderstand, Nominaltemperatur, BWert);
// Initialisiere die I2C-Kommunikation und das LCD-Display
Wire.begin();
lcd.init(); // lcd.begin(16, 4);
lcd.backlight( ) ;
dht.begin();
SSDx4.init(); SSDx4.set(7); // Helligkeit
// Überprüfe, ob die RTC korrekt initialisiert werden kann
if (!rtc.begin()) {
Serial.println("RTC konnte nicht gefunden werden");
while (1); // Bleibe in einer Endlosschleife, wenn die RTC nicht gefunden wird
}
// Überprüfe, ob die RTC läuft. Falls nicht, setze die Zeit auf die Kompilierungszeit
if (!rtc.isrunning()) {
Serial.println("RTC läuft NICHT!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void Seriell( float Temp, float humidity ) {
// Check if any reads failed and exit early (to try again).
if (isnan(Temp) || isnan( humidity )) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
Serial.print(F("Humidity: "));
Serial.print(humidity, 1);
Serial.print(F("% Temperature: "));
Serial.print( Temp, 1 );
Serial.println(F("°C "));
// NTC:
const double celsius = thermistor->readCelsius();
Serial.print(F("Temperatur: "));
Serial.print(celsius);
Serial.println(F(" °C "));
// Wait a few seconds between measurements.
//delay(2000);
}
void loop() {
// Lese die aktuelle Zeit von der RTC
DateTime now = rtc.now();
// Lösche das LCD-Display
//lcd.clear();
// Setze den Cursor auf die erste Zeile und gib das Datum aus
lcd.setCursor(0, 0);
lcd.print("Datum: ");
lcd.print(now.year(), DEC);
lcd.print('/');
lcd.print(now.month()/10, DEC); //Nullstellenunterdrückung
lcd.print(now.month()%10, DEC);
lcd.print('/');
lcd.print(now.day()/10, DEC); //Nullstellenunterdrückung
lcd.print(now.day()%10, DEC);
lcd.print(" ");
// Setze den Cursor auf die zweite Zeile und gib die Uhrzeit aus
lcd.setCursor(0, 1);
lcd.print("Uhrzeit: ");
lcd.print(now.hour()/10, DEC); //Nullstellenunterdrückung
lcd.print(now.hour()%10, DEC);
lcd.print(':');
lcd.print(now.minute()/10, DEC); //Nullstellenunterdrückung
lcd.print(now.minute()%10, DEC);
lcd.print(':');
lcd.print(now.second()/10, DEC); //Nullstellenunterdrückung
lcd.print(now.second()%10, DEC);
lcd.print(" ");
float temp = dht.readTemperature();
float hum = dht.readHumidity();
lcd.setCursor(0, 2);
lcd.print("T: "); lcd.print( temp, 1);
lcd.write(223); lcd.print("C / ");
lcd.print((temp*9/5)+32,1);
lcd.write(223); lcd.print("F ");
lcd.setCursor(0,3);
lcd.print("RH/%="); lcd.print( hum, 1);
lcd.print(" ");
// Warte für eine Sekunde
Seriell( temp, hum );
/* SSDx4.display(0, 1); SSDx4.display(1, 3);
SSDx4.point(1);
SSDx4.display(2, 3); SSDx4.display(3, 7); */
SSDx4.display(0, now.minute()/10);
SSDx4.display(1, now.minute()%10);
SSDx4.point(1);
SSDx4.display(2, now.second()/10);
SSDx4.display(3, now.second()%10);
delay(1000);
}