#include //Setup Sensoren #include #define DHTPIN1 8 #define DHTPIN2 9 #define DHTTYPE DHT22 DHT dht1(DHTPIN1, DHTTYPE); DHT dht2(DHTPIN2, DHTTYPE); #include //Setup SD SDK=D13, MOSI=D11, MISO=D12 #include //Setup LCD #include 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 = 1; //Status-Variable int stat2 = 1; float T1 = 0; //Temperatur-Variablen float T2 = 0; long logsek = 0; String logdata1 = ""; String logdata2 = ""; //* **EINSTELLUNGEN** *// const int mess = 10; //Messintervall in s !!! muss >2 wegen Sensoren const int schalt = 15*60; //Schaltintervall in s const int uT = 0; //Abschalt-Temperatur in °C const int oT = 6; //Einschalt-Temperatur in °C void setup() { //Serial.begin(9600); //Timer Setup: https://www.instructables.com/id/Arduino-Timer-Interrupts/ cli();//stop interrupts //set timer1 interrupt at 1Hz TCCR1A = 0;// set entire TCCR1A register to 0 TCCR1B = 0;// same for TCCR1B TCNT1 = 0;//initialize counter value to 0 // set compare match register for 1hz increments OCR1A = 15624;// = (16*10^6) / (1*1024) - 1 (must be <65536) // turn on CTC mode TCCR1B |= (1 << WGM12); // Set CS10 and CS12 bits for 1024 prescaler TCCR1B |= (1 << CS12) | (1 << CS10); // enable timer compare interrupt TIMSK1 |= (1 << OCIE1A); sei();//allow interrupts //Sensoren dht1.begin(); //Starten der Sensoren dht2.begin(); delay(2000); //LCD lcd.begin(16,2); //Starten des LCD, 16 Zeichen, 2 Zeilen lcd.backlight(); //Beleuchtung des Displays einschalten delay(1000); //Initialsierugn SD 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(1000); return; } lcd.setCursor(0,1); lcd.print("abgeschlossen"); delay(1000); pinMode(REL1, OUTPUT); pinMode(REL2, OUTPUT); digitalWrite(REL1, HIGH); digitalWrite(REL2, HIGH); delay(1000); digitalWrite(REL1, LOW); digitalWrite(REL2, LOW); File logfile = SD.open("logTruhe.txt", FILE_WRITE); //Erstelle bzw. öffne log-Datei logfile.println("t(min)\tTruhe\tT(°C)\tStatus"); logfile.close(); } ISR(TIMER1_COMPA_vect){ //timer1 interrupt 1Hz logsek++; } void loop() { //Messung, LOG und LCD if (logsek%mess == 0){ T1 = dht1.readTemperature(); logdata1 = String(logsek) + "\t1\t" + String(T1) + "\t" + String(stat1); T2 = dht2.readTemperature(); logdata2 = 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 + String(logsek)"); //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(999); } //Schaltung if (logsek%schalt == 0){ //Truhe 1 if (T1 >= oT){ digitalWrite(REL1, LOW); stat1 = 1; } else { if (T1 <= uT){ digitalWrite(REL1, HIGH); stat1 = 0; } } //Truhe 2 if (T2 >= oT){ digitalWrite(REL2, LOW); stat2 = 1; } else { if (T2 <= uT){ digitalWrite(REL2, HIGH); stat2 = 0; } } } }