Use DHT library from arduino repo (DHT_sensor_library)

in order to use the DHT_sensor_library the setup of the Truhen is moved
into the setup routine.

The log, updateLCD and printName funtions are removed, logic is handled
in the loop with help of new getter and setter methods.
This commit is contained in:
Simon Zeyer 2020-09-19 11:28:01 +02:00
parent fd8bdfb967
commit 456542514a

View File

@ -5,7 +5,9 @@
#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
#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();