#include //Setup Sensoren #include #include //Setup SD SDK=D13, MOSI=D11, MISO=D12 #include //Setup LCD #include #include "Truhe.h" #include "Settings.h" static unsigned long last_lcd_time = 0; static unsigned long last_mess_time = 0; static unsigned long last_schalt_time = 0; class Truhe { private: int _relay; DHT _dht; int _stat = -1; int _cur_temp = 0; int _updlcd = 0; String _name = ""; uint8_t _dhtpin; public: Truhe(String name, int relay, uint8_t dhtpin): _dht(dhtpin, DHT22) { _name = name; _relay = relay; _dhtpin = dhtpin; }; void setup() { Serial.println("Setup " + _name); Serial.println(_dhtpin); pinMode(_relay, OUTPUT); digitalWrite(_relay, HIGH); pinMode(_dhtpin, INPUT); _dht.begin(); delay(2000); } void mess() { Serial.println(String(_name) + " mess()"); //Serial.print("Minimum Sampling Period: "); //delay(_dht.getMinimumSamplingPeriod()); _cur_temp = _dht.readTemperature(); Serial.println(String(_name) + "\t\t" + String((int)_cur_temp) + " grad gelesen"); }; void schalt(int oT, int uT) { Serial.print(String(_name) + " schalt() stat: " + String(_stat)); if (_cur_temp >= oT && _stat != 1) { digitalWrite(_relay, LOW); _stat = 1; Serial.println("schalt " + _name + " zu " + String(_stat)); } else if (_cur_temp <= uT && _stat != 0) { digitalWrite(_relay, HIGH); _stat = 0; Serial.println("schalt " + _name + " zu " + String(_stat)); } } int getUpdLcd(){ return _updlcd;}; void setUpdLcd(int updlcd){ _updlcd = updlcd;}; int getRelay(){ return _relay;}; int getDhtPin(){return _dhtpin;}; int getStat(){return _stat;}; float getCurTemp(){return _cur_temp;}; String getName(){return _name;}; }; Truhe truhen[] = { Truhe("Truhe 1", 2, 8), Truhe("Truhe 2", 3, 9), }; void setup_sd() { //Initialsierugn SD lcd.clear(); lcd.setCursor(0, 0); //...(Zeichen,Zeile); lcd.print("Init SD"); if (!SD.begin(4)) { //Init SD_Karte mit CS auf Pin D4 lcd.setCursor(0, 1); lcd.print("fehlgeschlagen!"); Serial.println("Init SD fehlgeschlagen!"); delay(SETUPTIMEOUT); return; } else { lcd.setCursor(0, 1); lcd.print("abgeschlossen!"); Serial.println("Init SD abgeschlossen!"); delay(SETUPTIMEOUT); } } void setup_lcd() { //LCD lcd.begin(16, 2); //Starten des LCD, 16 Zeichen, 2 Zeilen lcd.backlight(); //Beleuchtung des Displays einschalten lcd.blink(); lcd.clear(); lcd.setCursor(0, 0); //...(Zeichen,Zeile); lcd.print("Init LCD"); lcd.setCursor(0, 1); lcd.print("abgeschlossen!"); Serial.println("Init LCD abgeschlossen!"); delay(SETUPTIMEOUT); } void setup() { Serial.begin(9600); Serial.println(); Serial.println(); setup_lcd(); setup_sd(); File logfile = SD.open("logTruhe.txt", FILE_WRITE); //Erstelle bzw. öffne log-Datei logfile.println("t(min)\tTruhe\tT(°C)\tStatus"); logfile.close(); lcd.clear(); for (int i = 0; i < (sizeof(truhen) / sizeof(truhen[0])); i++) { truhen[i].setup(); } wdt_enable(WDTO_4S); // Watchdog auf 1 s stellen delay(3000); Serial.println("Setup fi"); } void loop() { if(millis() - last_mess_time >= MESS_REFRESH_INTERVAL || last_mess_time == 0) { //MESSINTERVALL last_mess_time = millis(); File logfile = SD.open("logTruhe.txt", FILE_WRITE); for (int i = 0; i < (sizeof(truhen) / sizeof(truhen[0])); i++) { truhen[i].mess(); //Serial.println(String(_name) + " log()"); String logdata = String(0) + "\t\t" + String(truhen[i].getCurTemp()) + "\t" + String(truhen[i].getStat()); logfile.println(logdata); } logfile.println(); logfile.close(); } //Serial.println("Schaltintervall: "+ String(millis() - last_schalt_time) + " " + String(SCHALT_REFRESH_INTERVAL)); if(millis() - last_schalt_time >= SCHALT_REFRESH_INTERVAL || last_schalt_time == 0) { //SCHALTINTERVALL Serial.println("SCHALTINTERVALL"); last_schalt_time = millis(); for (int i = 0; i < (sizeof(truhen) / sizeof(truhen[0])); i++) { truhen[i].schalt(oT, uT); } } if(millis() - last_lcd_time >= LCD_REFRESH_INTERVAL || last_lcd_time == 0) { //LCD Update INTERVALL last_lcd_time = millis(); for (int i = 0; i < (sizeof(truhen) / sizeof(truhen[0])); i++) { //LCD-Anzeige lcd.setCursor(0, i); //...(Zeichen,Zeile); lcd.print(truhen[i].getName() + " " + String(truhen[i].getUpdLcd())); lcd.setCursor(8, i); lcd.print(" "); //Serial.println(sizeof(String(truhen[i].getCurTemp()))/2); lcd.setCursor(11 - sizeof(String(truhen[i].getCurTemp()))/2, i); lcd.setCursor(8, i); lcd.print(String(truhen[i].getCurTemp())); lcd.setCursor(11, i); lcd.print("\337"); lcd.setCursor(13, i); if (truhen[i].getStat() == -1) { lcd.print("-"); } else if (truhen[i].getStat() == 1) { lcd.print("I"); } else if (truhen[i].getStat() == 0) { lcd.print("O"); } if(truhen[i].getUpdLcd() == 0){ lcd.setCursor(15, i); lcd.print(String("|")); //Serial.println(String(truhen[i]._name) + " updateLCD("+String(i)+") ."); truhen[i].setUpdLcd(1); }else{ lcd.setCursor(15, i); lcd.print(String("-")); //Serial.println(String(truhen[i]._name) + " updateLCD("+String(i)+") "); truhen[i].setUpdLcd(0); } } } wdt_reset(); }