in order to use the DHT_sensor_library the setup of the Truhen is moved into the setup routine.
199 lines
5.5 KiB
C++
199 lines
5.5 KiB
C++
#include <DHT.h> //Setup Sensoren
|
|
#include <avr/wdt.h>
|
|
|
|
#include <SD.h> //Setup SD SDK=D13, MOSI=D11, MISO=D12
|
|
|
|
#include <Wire.h> //Setup LCD
|
|
#include <LiquidCrystal_I2C.h>
|
|
|
|
#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();
|
|
} |