Versuch mit Interrupt
der Interrupt soll die Sekunden hochzählen, problem ist halt, dass der loop in einer Sekunde mehrmals durchlaufen kann. hätte aber auch ein einfache boolean geregelt. EEEglaaal
This commit is contained in:
parent
7dda56c78d
commit
2632278569
@ -14,139 +14,147 @@ LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //0x3F = Adresse
|
|||||||
|
|
||||||
const int REL1 = 2; //Pin des Relais
|
const int REL1 = 2; //Pin des Relais
|
||||||
const int REL2 = 3;
|
const int REL2 = 3;
|
||||||
int stat1 = 0; //Status-Variable
|
int stat1 = 1; //Status-Variable
|
||||||
int stat2 = 0;
|
int stat2 = 1;
|
||||||
|
|
||||||
float T1 = 0; //Temperatur-Variablen
|
float T1 = 0; //Temperatur-Variablen
|
||||||
float T2 = 0;
|
float T2 = 0;
|
||||||
|
|
||||||
unsigned long zeit1 = 0; //Zeitstempel für Relais
|
long logsek = 0;
|
||||||
unsigned long zeit2 = 0;
|
|
||||||
int uptime = 0; //Zeitstempel für log in min
|
|
||||||
int logmin = 0;
|
|
||||||
int logsek = 0;
|
|
||||||
String logdata1 = "";
|
String logdata1 = "";
|
||||||
String logdata2 = "";
|
String logdata2 = "";
|
||||||
|
|
||||||
//* **EINSTELLUNGEN** *//
|
//* **EINSTELLUNGEN** *//
|
||||||
const int mess = 5; //Messintervall in s !!! muss >2 wegen Sensoren
|
const int mess = 10; //Messintervall in s !!! muss >2 wegen Sensoren
|
||||||
const int truhe = 30; //Schaltintervall in min
|
const int schalt = 15*60; //Schaltintervall in s
|
||||||
const int uT = 0; //Abschalt-Temperatur in °C
|
const int uT = 0; //Abschalt-Temperatur in °C
|
||||||
const int oT = 6; //Einschalt-Temperatur in °C
|
const int oT = 6; //Einschalt-Temperatur in °C
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
//Serial.begin(9600);
|
//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
|
dht1.begin(); //Starten der Sensoren
|
||||||
dht2.begin();
|
dht2.begin();
|
||||||
delay(2000);
|
delay(2000);
|
||||||
|
|
||||||
|
//LCD
|
||||||
lcd.begin(16,2); //Starten des LCD, 16 Zeichen, 2 Zeilen
|
lcd.begin(16,2); //Starten des LCD, 16 Zeichen, 2 Zeilen
|
||||||
lcd.backlight(); //Beleuchtung des Displays einschalten
|
lcd.backlight(); //Beleuchtung des Displays einschalten
|
||||||
delay(2000);
|
delay(1000);
|
||||||
|
|
||||||
|
//Initialsierugn SD
|
||||||
lcd.setCursor(0,0); //...(Zeichen,Zeile);
|
lcd.setCursor(0,0); //...(Zeichen,Zeile);
|
||||||
lcd.print("Initialisierung");
|
lcd.print("Initialisierung");
|
||||||
delay(2000);
|
delay(2000);
|
||||||
if (!SD.begin(4)) { //Initialisiere SD_Karte mit CS auf Pin D4
|
if (!SD.begin(4)) { //Initialisiere SD_Karte mit CS auf Pin D4
|
||||||
lcd.setCursor(0,1);
|
lcd.setCursor(0,1);
|
||||||
lcd.print("fehlgeschlagen!");
|
lcd.print("fehlgeschlagen!");
|
||||||
delay(2000);
|
delay(1000);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
lcd.setCursor(0,1);
|
lcd.setCursor(0,1);
|
||||||
lcd.print("abgeschlossen");
|
lcd.print("abgeschlossen");
|
||||||
delay(2000);
|
delay(1000);
|
||||||
|
|
||||||
pinMode(REL1, OUTPUT);
|
pinMode(REL1, OUTPUT);
|
||||||
pinMode(REL2, OUTPUT);
|
pinMode(REL2, OUTPUT);
|
||||||
digitalWrite(REL1, HIGH);
|
digitalWrite(REL1, HIGH);
|
||||||
digitalWrite(REL2, 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
|
File logfile = SD.open("logTruhe.txt", FILE_WRITE); //Erstelle bzw. öffne log-Datei
|
||||||
logfile.println("t(min)\tTruhe\tT(°C)\tStatus");
|
logfile.println("t(min)\tTruhe\tT(°C)\tStatus");
|
||||||
logfile.close();
|
logfile.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ISR(TIMER1_COMPA_vect){ //timer1 interrupt 1Hz
|
||||||
|
logsek++;
|
||||||
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
//Messung und log
|
//Messung, LOG und LCD
|
||||||
T1 = dht1.readTemperature();
|
if (logsek%mess == 0){
|
||||||
logdata1 = String(logmin) + ":" + String(logsek) + "\t1\t" + String(T1) + "\t" + String(stat1);
|
T1 = dht1.readTemperature();
|
||||||
T2 = dht2.readTemperature();
|
logdata1 = String(logsek) + "\t1\t" + String(T1) + "\t" + String(stat1);
|
||||||
logdata2 = String(logmin) + ":" + String(logsek) + "\t2\t" + String(T2) + "\t" + String(stat2);
|
T2 = dht2.readTemperature();
|
||||||
File logfile = SD.open("logTruhe.txt", FILE_WRITE);
|
logdata2 = String(logsek) + "\t2\t" + String(T2) + "\t" + String(stat2);
|
||||||
logfile.println(logdata1);
|
File logfile = SD.open("logTruhe.txt", FILE_WRITE);
|
||||||
logfile.println(logdata2);
|
logfile.println(logdata1);
|
||||||
logfile.println();
|
logfile.println(logdata2);
|
||||||
logfile.close();
|
logfile.println();
|
||||||
//Serial.println("Messung");
|
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 Truhe 1
|
//Schaltung
|
||||||
if (millis() >= zeit1){
|
if (logsek%schalt == 0){
|
||||||
|
//Truhe 1
|
||||||
if (T1 >= oT){
|
if (T1 >= oT){
|
||||||
digitalWrite(REL1, LOW);
|
digitalWrite(REL1, LOW);
|
||||||
stat1 = 1;
|
stat1 = 1;
|
||||||
zeit1 = millis()+(truhe*60*1000);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (T1 <= uT){
|
if (T1 <= uT){
|
||||||
digitalWrite(REL1, HIGH);
|
digitalWrite(REL1, HIGH);
|
||||||
stat1 = 0;
|
stat1 = 0;
|
||||||
zeit1 = millis()+(truhe*60*1000);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
//Truhe 2
|
||||||
else{
|
|
||||||
}
|
|
||||||
//Schaltung Truhe 2
|
|
||||||
if (millis() >= zeit2){
|
|
||||||
if (T2 >= oT){
|
if (T2 >= oT){
|
||||||
digitalWrite(REL2, LOW);
|
digitalWrite(REL2, LOW);
|
||||||
stat2 = 1;
|
stat2 = 1;
|
||||||
zeit2 = millis()+(truhe*60*1000);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (T2 <= uT){
|
if (T2 <= uT){
|
||||||
digitalWrite(REL2, HIGH);
|
digitalWrite(REL2, HIGH);
|
||||||
stat2 = 0;
|
stat2 = 0;
|
||||||
zeit2 = millis()+(truhe*60*1000);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{
|
|
||||||
}
|
|
||||||
//Serial.println("Schaltung");
|
|
||||||
|
|
||||||
//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(mess*1000);
|
|
||||||
uptime += mess;
|
|
||||||
logmin = uptime/60;
|
|
||||||
logsek = uptime%60;
|
|
||||||
//Serial.println("LCD");
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user