ich habe deshalb die 3,3 Volt Versorgung gewählt , damit die Knopfzelle der RTC nicht geladen wird ! und es wird ja in diversen Beschreibungen auch darauf hingewiesen, die 3,3 Volt zu verwenden.... mit 5 Volt geht es ja auch nicht !
Der Aufbau ist sicher in Ordnung möchte ich mal behaupten, da es ja sont gar nicht funktionieren würde ?!?
so hier der Code:
#include "LiquidCrystal_I2C.h" // Bibliothek für Display
LiquidCrystal_I2C LCD(39, 20, 4); // Argumente für Display : I2C Adresse / Zeilenlänge / Zeilenzahl
#include "RTClib.h" // Bibliothek für die RTC DS3231
RTC_DS3231 rtc;
#include "Wire.h" // Bibliothek für I2C
#include "DHT.h" // Bibliothek für Teperatursensor
DHT dht1(2, DHT22);
DHT dht2(3, DHT22);
long Timer1 = 0; // Zeitmessungsvariable 1 ( Temperatur alle 10 Sekunden )
long Timer2 = 0; // Zeitmessungsvariable 2
byte counter;
byte map_counter;
float Aktuelle_Temperatur_1 = 0;
float Aktuelle_Temperatur_2 = 0;
byte maxPfeil[8] = {B00100,
B01110,
B11111,
B01110,
B01110,
B01110,
B01110,
B00000};
byte minPfeil[8] = {B00000,
B01110,
B01110,
B01110,
B01110,
B11111,
B01110,
B00100};
byte Gradsymbol[8] = {B00110,
B01001,
B01001,
B00110,
B00000,
B00000,
B00000,
B00000};
byte iso[8] ={B00000,
B00000,
B00000,
B11111,
B11111,
B00000,
B00000,
B00000};
void setup()
{
pinMode(13,OUTPUT);
digitalWrite(13,0);
Serial.begin(9600);
dht1.begin();
dht2.begin();
Wire.begin();
LCD.init();
LCD.createChar(0, maxPfeil); // Eigene Sybole definiert
LCD.createChar(1, minPfeil);
LCD.createChar(2, Gradsymbol);
LCD.createChar(3, iso);
LCD.clear();
LCD.backlight();
rtc.begin();
}
void loop()
{
if( millis() >= Timer1 ) // alle 10 Sekunden die Temeraturen messen
{
float Temp1 = dht1.readTemperature();
float Temp2 = dht2.readTemperature();
float rtc_temperature = rtc.getTemperature();
DateTime now = rtc.now();
Serial.print(rtc_temperature);Serial.print(" ");Serial.print(now.hour());Serial.print(now.minute());Serial.println(now.second());
Serial.print(Temp1);
Serial.print(" ");
Serial.println(Temp2);
Serial.print(abs (Aktuelle_Temperatur_1 - Temp1 ));
Serial.print(" ");
Serial.println(abs (Aktuelle_Temperatur_2 - Temp2 ));
LCD.setCursor(0, 0);
LCD.print("Vorlauftemperatur");
LCD.setCursor(0, 2);
LCD.print("Ruecklauftemperatur");
if ( Aktuelle_Temperatur_1 < Temp1 )
{ LCD.setCursor(0, 1); LCD.print((char)0); }
if ( Aktuelle_Temperatur_1 > Temp1 )
{ LCD.setCursor(0, 1); LCD.print((char)1); }
if ( Aktuelle_Temperatur_1 == Temp1 )
{ LCD.setCursor(0, 1); LCD.print((char)3); }
LCD.setCursor(3, 1);
LCD.print(Temp1,1);
LCD.setCursor(8, 1);
LCD.print((char)2);
if ( Aktuelle_Temperatur_2 < Temp2 )
{ LCD.setCursor(0, 3); LCD.print((char)0); }
if ( Aktuelle_Temperatur_2 > Temp2 )
{ LCD.setCursor(0, 3); LCD.print((char)1); }
if ( Aktuelle_Temperatur_2 == Temp2 )
{ LCD.setCursor(0, 3); LCD.print((char)3); }
LCD.setCursor(3, 3);
LCD.print(Temp2,1);
LCD.setCursor(8, 3);
LCD.print((char)2);
Aktuelle_Temperatur_1 = Temp1;
Aktuelle_Temperatur_2 = Temp2;
Timer1 = millis() + 10000;
counter = 0;
}
if( millis() >= Timer2 )
{
if (counter!=0){
map_counter = map(counter,255,247,9,1);
LCD.setCursor(19, 0);
LCD.print(map_counter);
Serial.println(map_counter);
}
else
{
LCD.setCursor(19, 0);
LCD.print("0");
Serial.println("0");
}
Timer2 = millis() + 1000;
counter --;
}
}