Hallo liebe Gemeinde
Ich bin dabei eine Luftfeuchtigkeitskontrolle und eine Heizungssteuerung zu bauen. Grundsätzlich läuft es auch, die Sollwerte werden in der Nacht runtergesetzt, das Relay geschaltet... Soweit läuft alles. Später kommen dann noch bis zu 9 weiteren Sensoren und 9 weiteren Ausgängen dazu.
Warum ich hier aber aktiv werde ist ein kleines Problem, mein LCD Display. Es funktioniert eigentlich, aber von Zeit zu Zeit wird es "blind", kein Zeichen mehr zu sehen, dann muss ich den Arduino (Mega 2560) reseten, dann geht es wieder.
Kennt ihr das Problem?
Hier ist mein Code:
#include <LiquidCrystal.h>
#include <Wire.h>
#include "RTClib.h"
#include <DHT.h>
RTC_DS1307 rtc;
#define DHTPIN1 23
#define DHTTYPE DHT11
LiquidCrystal lcd(53, 52, 51, 50, 49, 48);
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
int timeValue = 0;
int t1 = 40; //solltemparatur
int hum1 = 50; //sollfeuchtigkeit
int temp = 10;
int tempdiff = 0;
int t1_1 = 0;
int relay1 = 47;
DHT dht1(DHTPIN1, DHTTYPE);
int relaystate1 = 0;
void setup() {
lcd.begin(16, 4); // LCD starten
Serial.begin(9600); // seielle kommunikation starten
if (! rtc.begin()) { //rtc starten
Serial.println("Couldn't find RTC");
while (1);
}
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
dht1.begin(); // dht starten
digitalWrite(relay1, HIGH); //Relay ausschalten
pinMode(relay1, OUTPUT);
}
void loop() {
DateTime now = rtc.now();
float h1 = dht1.readHumidity(); //temperatur auslesen
float dt1 = dht1.readTemperature() - 2; // LF auslesen
timeValue = (now.hour()*100 + now.minute()); //mein 4-stelligen Zeitwert erstellen
// Serial.println(timeValue);
lcd.setCursor(0, 0); // Zeit auf LCD schreiben
lcd.print(now.hour(), DEC);
lcd.print(':');
lcd.print(now.minute(), DEC);
lcd.print(':');
lcd.print(now.second(), DEC);
lcd.print(' ');
if ((timeValue < 600) || (timeValue >= 2100)) //Nachtabsenkung erstellen
{
tempdiff = temp - 4;
}
else if ((timeValue < 700) || (timeValue >= 2000))
{
tempdiff = temp - 3;
}
else if ((timeValue < 800) || (timeValue >= 1930))
{
tempdiff = temp - 2;
}
else if ((timeValue < 900) || (timeValue >= 1900))
{
tempdiff = temp - 1;
}
else
{
tempdiff = temp;
}
t1_1 = t1 - 10 + tempdiff; // Sollwert mit Nachtabsenkung errechnen
if (dt1 < t1_1) { // Ausgang schalten
digitalWrite(relay1, LOW);
relaystate1 = 1;
}
else if (dt1 > t1_1)
{
digitalWrite(relay1, HIGH);
relaystate1 = 0;
}
lcd.setCursor(0, 1);
lcd.print(dt1, 0);
lcd.print(" ");
lcd.print(t1_1);
lcd.print(" ");
lcd.setCursor(0, 2);
lcd.print(hum1 - h1, 0);
lcd.print(" ");
Serial.print(relaystate1);
Serial.print(" ");
Serial.print(t1_1);
Serial.print(" ");
Serial.println(dt1);
delay(200);
}