diff --git a/Steuerung_Truhen.ino b/Steuerung_Truhen.ino index 3153a83..dbefd03 100644 --- a/Steuerung_Truhen.ino +++ b/Steuerung_Truhen.ino @@ -5,7 +5,9 @@ #include //Setup LCD #include -LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //0x3F = Adresse des Displays + +#include "Truhe.h" +#include "Settings.h" static unsigned long last_lcd_time = 0; static unsigned long last_mess_time = 0; @@ -19,67 +21,31 @@ class Truhe { int _cur_temp = 0; int _updlcd = 0; String _name = ""; + uint8_t _dhtpin; public: - Truhe(String name, int relay, int dhtpin, int dhttype) { - _name = name; + Truhe(String name, int relay, uint8_t dhtpin): _dht(dhtpin, DHT22) { + _name = name; _relay = relay; - _dht.setup(dhtpin); - pinMode(_relay, OUTPUT); + _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.println(String(_name) + " mess()"); //Serial.print("Minimum Sampling Period: "); - //Serial.println(_dht.getMinimumSamplingPeriod()); //delay(_dht.getMinimumSamplingPeriod()); - _cur_temp = _dht.getTemperature(); - //Serial.println(String(_name) + "\t\t" + String(_cur_temp) + " grad gelesen"); + _cur_temp = _dht.readTemperature(); + Serial.println(String(_name) + "\t\t" + String((int)_cur_temp) + " grad gelesen"); }; - - void log(File logfile) { - //Serial.println(String(_name) + " log()"); - String logdata = String(0) + "\t\t" + String(_cur_temp) + "\t" + String(_stat); - logfile.println(logdata); - logfile.println(); - } - - void updateLCD(int row) { - //Serial.println(String(_name) + " updateLCD("+String(row)+")"); - //LCD-Anzeige - lcd.setCursor(0, row); //...(Zeichen,Zeile); - lcd.print(_name + " " + String(_updlcd)); - - lcd.setCursor(8, row); - lcd.print(" "); - //Serial.println(sizeof(String(_cur_temp))/2); - lcd.setCursor(11 - sizeof(String(_cur_temp))/2, row); - lcd.setCursor(8, row); - lcd.print(String(_cur_temp)); - lcd.setCursor(11, row); - lcd.print("\337"); - lcd.setCursor(13, row); - if (_stat == -1) { - lcd.print("-"); - } - else if (_stat == 1) { - lcd.print("I"); - } - else if (_stat == 0) { - lcd.print("O"); - } - if(_updlcd == 0){ - lcd.setCursor(15, row); - lcd.print(String("|")); - //Serial.println(String(_name) + " updateLCD("+String(row)+") ."); - _updlcd = 1; - }else{ - lcd.setCursor(15, row); - lcd.print(String("-")); - //Serial.println(String(_name) + " updateLCD("+String(row)+") "); - _updlcd = 0; - } - } - void schalt(int oT, int uT) { Serial.print(String(_name) + " schalt() stat: " + String(_stat)); if (_cur_temp >= oT && _stat != 1) { @@ -93,28 +59,21 @@ class Truhe { Serial.println("schalt " + _name + " zu " + String(_stat)); } } - - void printName(){ - //Serial.println(_name); - } + 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;}; }; -//* **EINSTELLUNGEN** *// -#define DHTTYPE DHT22 -#define SETUPTIMEOUT 500 -// So, the minimum sampling period is the minimum time -// interval that we need to wait between two consecutive -// measurements from the sensor. In the case of the DHT22, -// this value is of 2 seconds [1]. -static const unsigned long MESS_REFRESH_INTERVAL = 10000; // ms getMinimumSamplingPeriod == 2 sec -static const unsigned long SCHALT_REFRESH_INTERVAL = 60000; // ms -static const unsigned long LCD_REFRESH_INTERVAL = 500; // ms -const int uT = 1; //Abschalt-Temperatur in °C -const int oT = 6; //Einschalt-Temperatur in °C + + Truhe truhen[] = { - Truhe("Truhe 1", 2, 8, 0), - Truhe("Truhe 2", 3, 9, 0), + Truhe("Truhe 1", 2, 8), + Truhe("Truhe 2", 3, 9), }; @@ -161,8 +120,12 @@ void setup() { logfile.println("t(min)\tTruhe\tT(°C)\tStatus"); logfile.close(); lcd.clear(); - - wdt_enable(WDTO_5S); // Watchdog auf 1 s stellen + 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"); } @@ -171,14 +134,16 @@ void loop() { { //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].printName(); truhen[i].mess(); - File logfile = SD.open("logTruhe.txt", FILE_WRITE); - truhen[i].log(logfile); - logfile.close(); + //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) @@ -195,7 +160,39 @@ void loop() { //LCD Update INTERVALL last_lcd_time = millis(); for (int i = 0; i < (sizeof(truhen) / sizeof(truhen[0])); i++) { - truhen[i].updateLCD(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();