truhensteuerung/Steuerung_Truhen.ino
Simon Zeyer e4686bc7cb Erste version ohne interrupt
Der Weg war schonmal der Richtige.
2020-07-14 22:32:37 +02:00

153 lines
3.5 KiB
C++

#include <DHT.h> //Setup Sensoren
#include <DHT_U.h>
#define DHTPIN1 8
#define DHTPIN2 9
#define DHTTYPE DHT22
DHT dht1(DHTPIN1, DHTTYPE);
DHT dht2(DHTPIN2, DHTTYPE);
#include <SD.h> //Setup SD SDK=D13, MOSI=D11, MISO=D12
#include <Wire.h> //Setup LCD
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //0x3F = Adresse des Displays
const int REL1 = 2; //Pin des Relais
const int REL2 = 3;
int stat1 = 0; //Status-Variable
int stat2 = 0;
float T1 = 0; //Temperatur-Variablen
float T2 = 0;
unsigned long zeit1 = 0; //Zeitstempel für Relais
unsigned long zeit2 = 0;
int uptime = 0; //Zeitstempel für log in min
int logmin = 0;
int logsek = 0;
String logdata1 = "";
String logdata2 = "";
//* **EINSTELLUNGEN** *//
const int mess = 5; //Messintervall in s !!! muss >2 wegen Sensoren
const int truhe = 30; //Schaltintervall in min
const int uT = 0; //Abschalt-Temperatur in °C
const int oT = 6; //Einschalt-Temperatur in °C
void setup() {
//Serial.begin(9600);
dht1.begin(); //Starten der Sensoren
dht2.begin();
delay(2000);
lcd.begin(16,2); //Starten des LCD, 16 Zeichen, 2 Zeilen
lcd.backlight(); //Beleuchtung des Displays einschalten
delay(2000);
lcd.setCursor(0,0); //...(Zeichen,Zeile);
lcd.print("Initialisierung");
delay(2000);
if (!SD.begin(4)) { //Initialisiere SD_Karte mit CS auf Pin D4
lcd.setCursor(0,1);
lcd.print("fehlgeschlagen!");
delay(2000);
return;
}
lcd.setCursor(0,1);
lcd.print("abgeschlossen");
delay(2000);
pinMode(REL1, OUTPUT);
pinMode(REL2, OUTPUT);
digitalWrite(REL1, HIGH);
digitalWrite(REL2, HIGH);
File logfile = SD.open("logTruhe.txt", FILE_WRITE); //Erstelle bzw. öffne log-Datei
logfile.println("t(min)\tTruhe\tT(°C)\tStatus");
logfile.close();
}
void loop() {
//Messung und log
T1 = dht1.readTemperature();
logdata1 = String(logmin) + ":" + String(logsek) + "\t1\t" + String(T1) + "\t" + String(stat1);
T2 = dht2.readTemperature();
logdata2 = String(logmin) + ":" + String(logsek) + "\t2\t" + String(T2) + "\t" + String(stat2);
File logfile = SD.open("logTruhe.txt", FILE_WRITE);
logfile.println(logdata1);
logfile.println(logdata2);
logfile.println();
logfile.close();
//Serial.println("Messung");
//Schaltung Truhe 1
if (millis() >= zeit1){
if (T1 >= oT){
digitalWrite(REL1, LOW);
stat1 = 1;
zeit1 = millis()+(truhe*60*1000);
}
else {
if (T1 <= uT){
digitalWrite(REL1, HIGH);
stat1 = 0;
zeit1 = millis()+(truhe*60*1000);
}
}
}
else{
}
//Schaltung Truhe 2
if (millis() >= zeit2){
if (T2 >= oT){
digitalWrite(REL2, LOW);
stat2 = 1;
zeit2 = millis()+(truhe*60*1000);
}
else {
if (T2 <= uT){
digitalWrite(REL2, HIGH);
stat2 = 0;
zeit2 = millis()+(truhe*60*1000);
}
}
}
else{
}
//Serial.println("Schaltung");
//LCD-Anzeige
lcd.setCursor(0,0); //...(Zeichen,Zeile);
lcd.print("Truhe1 ");
lcd.setCursor(7,0);
lcd.print(String(T1));
lcd.setCursor(11,0);
lcd.print("\337C");
lcd.setCursor(13,0);
if (stat1 == 1){
lcd.print(" an");
}
else{
lcd.print("aus");
}
lcd.setCursor(0,1);
lcd.print("Truhe2 ");
lcd.setCursor(7,1);
lcd.print(String(T2));
lcd.setCursor(11,1);
lcd.print("\337C");
lcd.setCursor(13,1);
if (stat2 == 1){
lcd.print(" an");
}
else{
lcd.print("aus");
}
delay(mess*1000);
uptime += mess;
logmin = uptime/60;
logsek = uptime%60;
//Serial.println("LCD");
}