Servus @Deltaflyer,
anbei schicke ich dir meine Version die ich heute am Ofen selber hochgeladen habe. Dort habe ich den Fehler bereits korrigiert. Sorry für die Falschinformation. Ganz kurz noch zum Programm an sich. Ich wollte mit den Berechnungsvariablen bezwecken das zum einen der Mittelwert am LCD ausgegeben wird, und zum anderen eine Bedingung zu erschaffen die mir bei der Abschaltung der Heizschlangen hilft (siehe Summe_1, Summe_2 etc....).
In der If-Abfrage habe ich noch etwas hinterlegt. Nämlich den zaehler, zaehler_2, zaehler_3 und zaehler_4. Da war der Hintergrund das wenn nur ein Temperatursensor angewählt ist, die Abschaltung der Heizschlangen bei überschreiten der Temperatur realisiert werden kann. Oder eben dann mit den Summen. Ich denke ich habe es im Code recht deutlich gemacht.
Wobei das leider beim praktischen Test heute nicht funktioniert hat. Leider... Auch hat der Counter nach erreichen der eingestellten Temperatur über Poti nicht funktioniert. Aber das ist kein Vorwurf an dich. Ich habe mir das zu Hause ja schon so simuliert das ich weiss das deine Version funktioniert hat.
Ich denke es war ein Versagen meinerseits.
Aber das denke ich wird ein Profi so wie du relativ schnell feststellen können was ich für einen Fehler gemacht habe..
// PulverOfen V2
#define TEST false // Hier , wenn Du das Programm mit Minuten-Timer brauchst auf 'false' setzten
#include <LCD_I2C.h>
#include <max6675.h>
#include <math.h>
LCD_I2C LCD2(0x25, 20, 4);
LCD_I2C LCD1(0x27, 20, 4);
// deklaration der Worte für HeizschlangenStatus 0 und 1 für das LCD
const char* HeizschlangenText[] = { "AUS", "EIN" };
//Taster für Temperatursensoren
const int tasterPin = 27;
const int tasterPin_2 = 25;
const int tasterPin_3 = 24;
const int tasterPin_4 = 26;
int tasterZustand = LOW;
int vorherigerTasterZustand = HIGH;
int zaehler = 0;
int tasterZustand_2 = LOW;
int vorherigerTasterZustand_2 = HIGH;
int zaehler_2 = 0;
int tasterZustand_3 = LOW;
int vorherigerTasterZustand_3 = HIGH;
int zaehler_3 = 0;
int tasterZustand_4 = LOW;
int vorherigerTasterZustand_4 = HIGH;
int zaehler_4 = 0;
//Temperatursensor 1
int thermoDO = 10;
int thermoCS = 11;
int thermoCLK = 12;
//Temperatursensor 2
int thermoDO_2 = 5;
int thermoCS_2 = 4;
int thermoCLK_2 = 13;
//Temperatursensor 3
int thermoDO_3 = 3;
int thermoCS_3 = 2;
int thermoCLK_3 = 1;
//Temperatursensor 4
int thermoDO_4= 0;
int thermoCS_4 = 22;
int thermoCLK_4 = 23;
//Taster für Heizschlangen unten
const int Taster_Heizschlangen_unten = 50;
int tasterStatus = HIGH;
unsigned int Tasterzaehler = 0;
bool LEDSTATUS = false;
unsigned long entprellZeit = 100; //Hier wird die Zeit die entprellt wird eingestellt.
unsigned long tasterZeit = 0; //Hier wird die Zeit in ms abgespeichert
bool LCD_Variable_HeizenOben = 0;
//Taster für Heizschlangen oben
const int Taster_Heizschlangen_oben = 48;
int tasterStatus_1 = HIGH;
unsigned int Tasterzaehler_1 = 0;
bool LEDSTATUS_1 = false;
unsigned long entprellZeit_1 = 100; //Hier wird die Zeit die entprellt wird eingestellt.
unsigned long tasterZeit_1 = 0; //Hier wird die Zeit in ms abgespeichert
bool LCD_Variable_HeizenUnten = 0;
//Temperatursimulation
int Heizen = A7;
int Heizen_MIN = 0;
int Heizen_MAX = 400;
int HeizenState;
int HeizenValue; //Müsste eigentlich der Mittelwert aus den Sensorwerten sein
//Counter-Poti Parameter
int CounterPoti = A0;
int CounterValue;
bool CounterStarted = false;
int Poti_Counter_MIN = 0;
int Poti_Counter_MAX = 120;
//Temperatur-Poti Parameter
int TemperaturValue;
int TemperaturState;
int Poti_Temperatur_MIN = 100;
int Poti_Temperatur_MAX = 400;
//"Relaisausgaenge"
int Heizschlange_KF1 = 6;
int Heizschlange_KF2 = 32;
int Heizschlange_KF3 = 33;
int Heizschlange_KF4 = 7;
int Heizschlange_KF5 = 34;
int Luefter_oben = 9;
int Luefter_unten = 8;
int Summer = 28;
//Funktionsvariablen
int selectedHeater = 0; //0 fuer untere Heizschlangen, 1 fuer obere Heizschlangen. Wenn beide angewaehlt Wert = 3
bool HeizschlangenStatus = false;
bool CounterGO = false;
long unsigned int start;
long unsigned int intervall = 1000; // 1 Sekunde = "delay"
long unsigned int refreshStart = 20; // Damit das LCD gleich im ersten loop beschrieben wird
long unsigned int refreshIntervall = 20; // intervall mit dem das UpdateLCD aufgerufen wird(50x / Sekunde)
int CounterState() {
if (!CounterGO) {
return map(analogRead(CounterPoti), 0, 1023, Poti_Counter_MIN, Poti_Counter_MAX);
} // hier wird, solange CounterGo auf false ist, also der CountDown noch nicht gestartet ist
// die Stellung des Counter-Potis eingelesen.
else {
return CounterValue; // Sorgt dafür, dass CounterValue sich nicht ändert, falls der Countdown bereits läuft
}
}
void setup() {
LCD1.begin();
LCD1.backlight();
LCD2.begin();
LCD2.backlight();
initLCD();
Serial.begin(9600);
pinMode(Heizschlange_KF1, OUTPUT);
pinMode(Heizschlange_KF2, OUTPUT);
pinMode(Heizschlange_KF3, OUTPUT);
pinMode(Heizschlange_KF4, OUTPUT);
pinMode(Heizschlange_KF5, OUTPUT);
pinMode(Luefter_oben, OUTPUT);
pinMode(Luefter_unten, OUTPUT);
pinMode(Summer, OUTPUT);
pinMode(Taster_Heizschlangen_oben, INPUT_PULLUP);
pinMode(Taster_Heizschlangen_unten, INPUT_PULLUP);
pinMode(tasterPin, INPUT_PULLUP);
pinMode(tasterPin_2, INPUT_PULLUP);
pinMode(tasterPin_3, INPUT_PULLUP);
pinMode(tasterPin_4, INPUT_PULLUP);
}
void loop()
{ //*******************************************Abfrage der Temperatur************************************************************
//Temperatursensor_1 Abfrage
MAX6675 thermocouple1(thermoCLK, thermoCS, thermoDO);
double TemperaturSensor_1 = thermocouple1.readCelsius();
//Temperatursensor_2 Abfrage
MAX6675 thermocouple2(thermoCLK_2, thermoCS_2, thermoDO_2);
double TemperaturSensor_2= thermocouple2.readCelsius();
//Temperatursensor_3 Abfrage
MAX6675 thermocouple3(thermoCLK_3, thermoCS_3, thermoDO_3);
double TemperaturSensor_3 = thermocouple3.readCelsius();
//Temperatursensor_4 Abfrage
MAX6675 thermocouple4(thermoCLK_4, thermoCS_4, thermoDO_4);
double TemperaturSensor_4 = thermocouple4.readCelsius();
//*******************************************Berechnung des Mittelwerts für Temperaturausgabe************************************
double Summe_1 = (TemperaturSensor_1 + TemperaturSensor_2) /2;
double Summe_2 = (TemperaturSensor_2 + TemperaturSensor_3) /2;
double Summe_3 = (TemperaturSensor_3 + TemperaturSensor_4) /2;
double Summe_4 = (TemperaturSensor_1 + TemperaturSensor_3) /2;
double Summe_5 = (TemperaturSensor_1 + TemperaturSensor_4) /2;
double Summe_6 = (TemperaturSensor_2 + TemperaturSensor_4) /2;
double Summe_7 = (TemperaturSensor_1 + TemperaturSensor_2 + TemperaturSensor_3) /3;
double Summe_8 = (TemperaturSensor_1 + TemperaturSensor_2 + TemperaturSensor_4) /3;
double Summe_9 = (TemperaturSensor_2 + TemperaturSensor_3 + TemperaturSensor_4) /3;
double Summe_10 = (TemperaturSensor_1 + TemperaturSensor_3 + TemperaturSensor_4) /3;
double Summe_11 = (TemperaturSensor_1 + TemperaturSensor_2 + TemperaturSensor_3 + TemperaturSensor_4) /4;
//*****************************************************************************************************************************
//*******************************************Einschalten der Luefter im Einschaltmoment der Steuerung**************************
digitalWrite(Luefter_oben, LOW);
digitalWrite(Luefter_unten, LOW);
//*****************************************************************************************************************************
//Tasterabfrage und Änderung des Zählerstandes für S1
tasterZustand = digitalRead(tasterPin);
if (tasterZustand == HIGH && vorherigerTasterZustand == LOW)
{
zaehler = 1 - zaehler;
}
vorherigerTasterZustand = tasterZustand;
//Tasterabfrage und Änderung des Zählerstandes für S2
tasterZustand_2 = digitalRead(tasterPin_2);
if (tasterZustand_2 == HIGH && vorherigerTasterZustand_2 == LOW)
{
zaehler_2 = 1 - zaehler_2;
}
vorherigerTasterZustand_2 = tasterZustand_2;
//Tasterabfrage und Änderung des Zählerstandes für S3
tasterZustand_3 = digitalRead(tasterPin_3);
if (tasterZustand_3 == HIGH && vorherigerTasterZustand_3 == LOW)
{
zaehler_3 = 1 - zaehler_3;
}
vorherigerTasterZustand_3 = tasterZustand_3;
//Tasterabfrage und Änderung des Zählerstandes für S4
tasterZustand_4 = digitalRead(tasterPin_4);
if (tasterZustand_4 == HIGH && vorherigerTasterZustand_4 == LOW)
{
zaehler_4 = 1 - zaehler_4;
}
vorherigerTasterZustand_4 = tasterZustand_4;
//********************************************************Tasterabfrage fuer Taster Heizschlagen oben**************************
tasterStatus_1 = digitalRead(Taster_Heizschlangen_oben);
if (tasterStatus_1 == LOW) {
tasterZeit_1 = millis();
Tasterzaehler_1 = 1;
}
if ((millis() - tasterZeit_1 > entprellZeit_1) && Tasterzaehler_1 == 1) {
LEDSTATUS_1 = !LEDSTATUS_1;
Tasterzaehler_1 = 0;
}
if (LEDSTATUS_1 == true) {
selectedHeater = 1; //Oberen Heizschlangen angewaehlt
LCD_Variable_HeizenOben = 1;
digitalWrite(Heizschlange_KF4, LOW);
digitalWrite(Heizschlange_KF5, LOW);
} else {
LCD_Variable_HeizenOben = 0;
digitalWrite(Heizschlange_KF4, HIGH);
digitalWrite(Heizschlange_KF5, HIGH);
}
//************************************************************Heizschlangen unten**********************************************FERTIG!!!!!!
tasterStatus = digitalRead(Taster_Heizschlangen_unten);
if (tasterStatus == LOW) {
tasterZeit = millis();
Tasterzaehler = 1;
}
if ((millis() - tasterZeit > entprellZeit) && Tasterzaehler == 1) {
LEDSTATUS = !LEDSTATUS;
Tasterzaehler = 0;
}
if (LEDSTATUS == true) {
selectedHeater = 2; //Untere Heizschlangen angewaehlt
LCD_Variable_HeizenUnten = 1;
digitalWrite(Heizschlange_KF1, LOW);
digitalWrite(Heizschlange_KF2, LOW);
digitalWrite(Heizschlange_KF3, LOW);
} else {
LCD_Variable_HeizenUnten = 0;
digitalWrite(Heizschlange_KF1, HIGH);
digitalWrite(Heizschlange_KF2, HIGH);
digitalWrite(Heizschlange_KF3, HIGH);
}
//******************************************************************************************************************************
//******************************************************Verweis auf Funktion je nach Auswahl der Heizschlangen******************
if (LEDSTATUS && LEDSTATUS_1) // Bedingung wenn beide Taster betätigt wurden.
{
selectedHeater = 3;
Temperaturstabilisierung_both(TemperaturSensor_1, TemperaturSensor_2, TemperaturSensor_3, TemperaturSensor_4, Summe_1, Summe_2, Summe_3, Summe_4, Summe_5, Summe_6, Summe_7, Summe_8, Summe_9, Summe_10, Summe_11);
}
else if (LEDSTATUS) // Bedingung wenn Heizschlangen unten angewählt wurden
{
selectedHeater = 1;
Temperaturstabilisierung_unten(TemperaturSensor_1, TemperaturSensor_2, TemperaturSensor_3, TemperaturSensor_4, Summe_1, Summe_2, Summe_3, Summe_4, Summe_5, Summe_6, Summe_7, Summe_8, Summe_9, Summe_10, Summe_11);
}
else if (LEDSTATUS_1)
{
selectedHeater = 2; // Bedingung wenn Heizschlangenoben angewählt wurden
Temperaturstabilisierung_oben(TemperaturSensor_1, TemperaturSensor_2, TemperaturSensor_3, TemperaturSensor_4, Summe_1, Summe_2, Summe_3, Summe_4, Summe_5, Summe_6, Summe_7, Summe_8, Summe_9, Summe_10, Summe_11);
}
else // Bedingung wenn kein taster betätigt wurde
{
selectedHeater = 0;
}
//Potiabfrage für Temperatur
TemperaturState = analogRead(A1);
TemperaturValue = map(TemperaturState, 0, 1023, Poti_Temperatur_MIN, Poti_Temperatur_MAX);
//*********************************************************Verweis auf LCD-Funktion************************************************
if (millis() - refreshStart > refreshIntervall) { //refreshTimerfür LCD
refreshStart = millis();
updateLCD();
}
//*********************************************************************************************************************************
//*********************************************************Verweis auf TimerFunction sobald die eingestellte Temperatur erreich wurde*******
if (CounterGO)
{
static uint8_t SekundenCounter = 0; // wird benutzt um 60 Sekunden abzuzählen
if (!TEST && !CounterStarted) { //wenn Prgamm nicht in TEST Modus undDer Countdown gerade erst gestartet
SekundenCounter = 60; // Zähler für 1 Minute (60 Sekunden) setzen
CounterStarted = true; // ab jetzt werden Minuten gezählt anstatt nur Sekunden
}
unsigned long currentMillis = millis(); // Aktuelle Zeit abrufen
if (currentMillis - start >= intervall) // Intervall = 1 Sekunde.
{
start = currentMillis;
if (SekundenCounter > 0) SekundenCounter--; // Sekundenzähler runter zählen bis 0
if (CounterValue > 0 && SekundenCounter == 0) { // wenn 60 Sekunden um sind
CounterValue--; // CounterValue um 1 Min. runter
Serial.print("Minuten");
Serial.println(CounterValue);
if (CounterStarted) SekundenCounter = 60; // SekundenCounter wieder auf 60 Sekunden setzen
if (CounterValue == 0)
{ // Wenn counterValu = 0 --> Zeit abgelaufen
CountdownBeendet();
digitalWrite(Summer, HIGH);
delay(1000);
digitalWrite(Summer, LOW);
delay(1000);
digitalWrite(Summer, HIGH);
delay(1000);
digitalWrite(Summer, LOW);
delay(3000000);
digitalWrite(Luefter_unten, HIGH);
digitalWrite(Luefter_oben, HIGH);
}
}
}
} else {
if (!CounterStarted) CounterValue = CounterState();
updateLCD(); // sofortiges LCD update wenn am Poti gedreht wird und der Countdown noch nicht läuft.
}
//*****************************************************************************************************************************************
delay(1000);
switch (1000 * zaehler + 100 * zaehler_2 + 10 * zaehler_3 + 1* zaehler_4)
{
case 1000: /*-------------------------------------------Fertig-------------------------------------*/
LCD1.clear();
LCD1.setCursor(0, 0);
LCD1.print("T1 = ");
LCD1.print(TemperaturSensor_1);
LCD1.setCursor(0, 1);
LCD1.print("Temperatur 2 = AUS");
LCD1.setCursor(0, 2);
LCD1.print("Temperatur 3 = AUS");
LCD1.setCursor(0, 3);
LCD1.print("Temperatur 4 = AUS");
Serial.println("case 1000");
break;
case 100: /*-------------------------------------------Fertig-------------------------------------*/
LCD1.clear();
LCD1.setCursor(0, 0);
LCD1.print("Temperatur 1 = AUS ");
LCD1.setCursor(0, 1);
LCD1.print("T 2 = ");
LCD1.print(TemperaturSensor_2);
LCD1.setCursor(0, 2);
LCD1.print("Temperatur 3 = AUS");
LCD1.setCursor(0, 3);
LCD1.print("Temperatur 4 = AUS");
Serial.println("case 100");
break;
case 10: /*-------------------------------------------Fertig-------------------------------------*/
LCD1.clear();
LCD1.setCursor(0, 0);
LCD1.print("Temperatur 1 = AUS");
LCD1.setCursor(0, 1);
LCD1.print("Temperatur 2 = AUS");
LCD1.setCursor(0, 2);
LCD1.print("T3 = ");
LCD1.print(TemperaturSensor_3);
LCD1.setCursor(0, 3);
LCD1.print("Temperatur 4 = AUS");
Serial.println("case 10");
break;
case 1: /*-------------------------------------------Fertig-------------------------------------*/
LCD1.clear();
LCD1.setCursor(0, 0);
LCD1.print("Temperatur 1 = AUS");
LCD1.setCursor(0, 1);
LCD1.print("Temperatur 2 = AUS");
LCD1.setCursor(0, 2);
LCD1.print("Temperatur 3 = AUS");
LCD1.setCursor(0, 3);
LCD1.print("T4 = ");
LCD1.print(TemperaturSensor_4);
Serial.println("case 1");
break;
case 1100: /*-------------------------------------------Fertig-------------------------------------*/
LCD1.clear();
LCD1.setCursor(0, 0);
LCD1.print("T1= ");
LCD1.print(TemperaturSensor_1);
LCD1.setCursor(0, 1);
LCD1.print("T2= ");
LCD1.print(TemperaturSensor_2);
LCD1.setCursor(11, 1);
LCD1.print("D =");
LCD1.print(Summe_1);
LCD1.setCursor(0, 2);
LCD1.print("Temperatur 3 = AUS");
LCD1.setCursor(0, 3);
LCD1.print("Temperatur 4 = AUS");
Serial.println("case 1100");
break;
case 1010: /*-------------------------------------------Fertig-------------------------------------*/
LCD1.clear();
LCD1.setCursor(0, 0);
LCD1.print("T1 = ");
LCD1.print(TemperaturSensor_1);
LCD1.setCursor(0, 1);
LCD1.print("Temperatur 2 = AUS");
LCD1.setCursor(0, 2);
LCD1.print("T3 = ");
LCD1.print(TemperaturSensor_3);
LCD1.setCursor(11, 2);
LCD1.print("D=");
LCD1.print(Summe_4);
LCD1.setCursor(0, 3);
LCD1.print("Temperatur 4 = AUS");
Serial.println("case 1010");
break;
case 1001: /*-------------------------------------------Fertig-------------------------------------*/
LCD1.clear();
LCD1.setCursor(0, 0);
LCD1.print("T1 = ");
LCD1.print(TemperaturSensor_1);
LCD1.setCursor(0, 1);
LCD1.print("Temperatur 2 = AUS");
LCD1.setCursor(0, 2);
LCD1.print("Temperatur 3 = AUS");
LCD1.setCursor(0, 3);
LCD1.print("T4 = ");
LCD1.print(TemperaturSensor_4);
LCD1.setCursor(11, 3);
LCD1.print("D=");
LCD1.print(Summe_5);
Serial.println("case 1001");
break;
case 110: /*-------------------------------------------Fertig-------------------------------------*/
LCD1.clear();
LCD1.setCursor(0, 0);
LCD1.print("Temperatur 1 = AUS");
LCD1.setCursor(0, 1);
LCD1.print("T2 = ");
LCD1.print(TemperaturSensor_2);
LCD1.setCursor(0, 2);
LCD1.print("T3 = ");
LCD1.print(TemperaturSensor_3);
LCD1.setCursor(11, 2);
LCD1.print("D=");
LCD1.print(Summe_2);
LCD1.setCursor(0, 3);
LCD1.print("Temperatur 4 = AUS");
Serial.println("case 110");
break;
case 101: /*-------------------------------------------Fertig-------------------------------------*/
LCD1.clear();
LCD1.setCursor(0, 0);
LCD1.print("Temperatur 1 = AUS");
LCD1.setCursor(0, 1);
LCD1.print("T2 = ");
LCD1.print(TemperaturSensor_2);
LCD1.setCursor(0, 2);
LCD1.print("Temperatur 3 = AUS");
LCD1.setCursor(0, 3);
LCD1.print("T4 = ");
LCD1.print(TemperaturSensor_4);
LCD1.setCursor(11, 3);
LCD1.print("D=");
LCD1.print(Summe_6);
Serial.println("case 0101");
break;
case 11: /*-------------------------------------------Fertig-------------------------------------*/
LCD1.clear();
LCD1.setCursor(0, 0);
LCD1.print("Temperatur 1 = AUS");
LCD1.setCursor(0, 1);
LCD1.print("Temperatur 2 = AUS");
LCD1.setCursor(0, 2);
LCD1.print("T3 = ");
LCD1.print(TemperaturSensor_3);
LCD1.setCursor(0, 3);
LCD1.print("T4 = ");
LCD1.print(TemperaturSensor_4);
LCD1.setCursor(11, 3);
LCD1.print("D=");
LCD1.print(Summe_3);
Serial.println("case 0011");
break;
case 1110: /*-------------------------------------------Fertig-------------------------------------*/
LCD1.clear();
LCD1.setCursor(0, 0);
LCD1.print("T1 = ");
LCD1.print(TemperaturSensor_1);
LCD1.setCursor(0, 1);
LCD1.print("T2 = ");
LCD1.print(TemperaturSensor_2);
LCD1.setCursor(0, 2);
LCD1.print("T3 = ");
LCD1.print(TemperaturSensor_3);
LCD1.setCursor(11, 2);
LCD1.print("D=");
LCD1.print(Summe_7);
LCD1.setCursor(0, 3);
LCD1.print("Temperatur 4 = AUS");
Serial.println("case 1110");
break;
case 1101: /*-------------------------------------------Fertig-------------------------------------*/
LCD1.clear();
LCD1.setCursor(0, 0);
LCD1.print("T1 = ");
LCD1.print(TemperaturSensor_1);
LCD1.setCursor(0, 1);
LCD1.print("T2 = ");
LCD1.print(TemperaturSensor_2);
LCD1.setCursor(0, 2);
LCD1.print("Temperatur 3 = AUS");
LCD1.setCursor(0, 3);
LCD1.print("T4 = ");
LCD1.print(TemperaturSensor_4);
LCD1.setCursor(11, 3);
LCD1.print("D=");
LCD1.print(Summe_8);
Serial.println("case 1101");
break;
case 1011: /*-------------------------------------------Fertig-------------------------------------*/
LCD1.clear();
LCD1.setCursor(0, 0);
LCD1.print("T1 = ");
LCD1.print(TemperaturSensor_1);
LCD1.setCursor(0, 1);
LCD1.print("Temperatur 2 = AUS");
LCD1.setCursor(0, 2);
LCD1.print("T3 = ");
LCD1.print(TemperaturSensor_3);
LCD1.setCursor(0, 3);
LCD1.print("T4 = ");
LCD1.print(TemperaturSensor_4);
LCD1.setCursor(11, 3);
LCD1.print("D=");
LCD1.print(Summe_10);
Serial.println("case 1011");
break;
case 111: /*-------------------------------------------Fertig-------------------------------------*/
LCD1.clear();
LCD1.setCursor(0, 0);
LCD1.print("Temperatur 1 = AUS");
LCD1.setCursor(0, 1);
LCD1.print("T2 = ");
LCD1.print(TemperaturSensor_2);
LCD1.setCursor(0, 2);
LCD1.print("T3 = ");
LCD1.print(TemperaturSensor_3);
LCD1.setCursor(0, 3);
LCD1.print("T4 = ");
LCD1.print(TemperaturSensor_4);
LCD1.setCursor(11,3);
LCD1.print("D=");
LCD1.print(Summe_9);
Serial.println("case 0111");
break;
case 1111: /*-------------------------------------------Fertig-------------------------------------*/
LCD1.clear();
LCD1.setCursor(0, 0);
LCD1.print("T1 = ");
LCD1.print(TemperaturSensor_1);
LCD1.setCursor(0, 1);
LCD1.print("T2 = ");
LCD1.print(TemperaturSensor_2);
LCD1.setCursor(0, 2);
LCD1.print("T3 = ");
LCD1.print(TemperaturSensor_3);
LCD1.setCursor(0, 3);
LCD1.print("T4 = ");
LCD1.print(TemperaturSensor_4);
LCD1.setCursor(11, 3);
LCD1.print("D=");
LCD1.print(Summe_11);
Serial.println("case 1111");
break;
default: /*-------------------------------------------Fertig-------------------------------------*/
LCD1.clear();
LCD1.setCursor(0, 0);
LCD1.print("Temperatur 1 = AUS");
LCD1.setCursor(0, 1);
LCD1.print("Temperatur 2 = AUS");
LCD1.setCursor(0, 2);
LCD1.print("Temperatur 3 = AUS");
LCD1.setCursor(0, 3);
LCD1.println("Temperatur 4 = AUS");
break;
}
} //Loop geschlossen
/*currentMillis wird initalisiert und bekommt im Moment der initialisierung den Wert aus millis(). Dadurch das aber millis logischerweise im Startmoment = 0 ist, hat die Variable currentMillis auch den Wert = 0.
innerhalb der if-Abfrage wird dann die Startzeit (currentMillis) - der letzten Zeit abgezogen. Beim ersten durchlauf ergibt das also 0-0 = 0 (if-Abfrage nicht erfüllt). Jetzt wird vor der if-Abfrage solange gewartet (1000ms)
bis currentMillis > als intervall ist. Das bedeutet die if-Abfrage ist somit true. Innerhalb der if-Abfrage wird der Wert von currentMillis an start übergeben. Das bedeutet also das start nun den Wert 1000 hat. Da ja die
if-Abfrage erst true war wenn der intervall >= der Berechnung war. Im nächsten Durchlauf passiert nun das selbe. Der wird von currentMillis wird wieder auf 0 gesetzt und die if-Abfrage ist erst dann true wenn 1000ms vergangen
sind. Somit wird statt einem delay(1000); bei dem das Programm stehen bleibt übergangen. Kurz gesagt ist die Variable intervall gleich dein delay() denn man normalerweise eintellt.*/
//********************************************************Fertig*********************************************************************
void CountdownBeendet()
{
Serial.println("****** FERTIG ******");
CounterStarted = false; // Counter stopp
CounterGO = false; // CountDown abschalten
digitalWrite(Heizschlange_KF1, HIGH);
digitalWrite(Heizschlange_KF2, HIGH);
digitalWrite(Heizschlange_KF3, HIGH);
digitalWrite(Heizschlange_KF4, HIGH);
digitalWrite(Heizschlange_KF5, HIGH);
delay(300000);
digitalWrite(Luefter_oben, HIGH);
digitalWrite(Luefter_unten, HIGH);
// diese beiden Zeilen müssen unbedingt bleiben, egal was Du alles in diese Funktion schreibst
// Sonst kannst Du keinen neuen Zyklus starten ohne den Arduino neu zu starten
// Falls Du irgendeine Ende-Nachricht aufs LCD schreibst, musst Du dafür sorgen, dass beim Start
// eines neuen "Back-Zyklus" die Funktion initLCD() aufgerufen wird, damit das lcd wieder den korrekten
// Inhalt hat.
}
void Temperaturstabilisierung_oben(double TemperaturSensor_1, double TemperaturSensor_2, double TemperaturSensor_3, double TemperaturSensor_4, double Summe_1, double Summe_2, double Summe_3, double Summe_4, double Summe_5, double Summe_6, double Summe_7, double Summe_8, double Summe_9, double Summe_10, double Summe_11)
{
if (zaehler == 1 && TemperaturSensor_1 || zaehler_2 == 1 && TemperaturSensor_2 || zaehler_3 == 1 && TemperaturSensor_3 || zaehler_4 == 1 && TemperaturSensor_4 || Summe_1 || Summe_2 || Summe_3 || Summe_4 || Summe_5 || Summe_6
|| Summe_7 || Summe_8 || Summe_9 || Summe_10 || Summe_11 < TemperaturValue && !HeizschlangenStatus)
{
HeizschlangenStatus = true;
}
else if (zaehler == 1 && TemperaturSensor_1 || zaehler_2 == 1 && TemperaturSensor_2 || zaehler_3 == 1 && TemperaturSensor_3 || zaehler_4 == 1 && TemperaturSensor_4 || Summe_1 || Summe_2 || Summe_3 || Summe_4 || Summe_5 || Summe_6
|| Summe_7 || Summe_8 || Summe_9 || Summe_10 || Summe_11 < TemperaturValue && !HeizschlangenStatus >= TemperaturValue && HeizschlangenStatus) {
HeizschlangenStatus = false;
CounterGO = true;
CounterValue = CounterState(); // Counter-Poti einsesen
}
if (HeizschlangenStatus == true) {
digitalWrite(Heizschlange_KF1, LOW);
digitalWrite(Heizschlange_KF2, LOW);
}
if (HeizschlangenStatus == false) {
digitalWrite(Heizschlange_KF1, HIGH);
digitalWrite(Heizschlange_KF2, HIGH);
}
}
//********************************************************************************************************************************
//********************************************************Fertig****************************************************************
void Temperaturstabilisierung_unten(double TemperaturSensor_1, double TemperaturSensor_2, double TemperaturSensor_3, double TemperaturSensor_4, double Summe_1, double Summe_2, double Summe_3, double Summe_4, double Summe_5, double Summe_6, double Summe_7, double Summe_8, double Summe_9, double Summe_10, double Summe_11)
{
if (zaehler == 1 && TemperaturSensor_1 || zaehler_2 == 1 && TemperaturSensor_2 || zaehler_3 == 1 && TemperaturSensor_3 || zaehler_4 == 1 && TemperaturSensor_4 || Summe_1 || Summe_2 || Summe_3 || Summe_4 || Summe_5 || Summe_6
|| Summe_7 || Summe_8 || Summe_9 || Summe_10 || Summe_11 < TemperaturValue && !HeizschlangenStatus < TemperaturValue && !HeizschlangenStatus) {
HeizschlangenStatus = true;
}
else if (zaehler == 1 && TemperaturSensor_1 || zaehler_2 == 1 && TemperaturSensor_2 || zaehler_3 == 1 && TemperaturSensor_3 || zaehler_4 == 1 && TemperaturSensor_4 || Summe_1 || Summe_2 || Summe_3 || Summe_4 || Summe_5 || Summe_6
|| Summe_7 || Summe_8 || Summe_9 || Summe_10 || Summe_11 < TemperaturValue && !HeizschlangenStatus >= TemperaturValue && HeizschlangenStatus) {
HeizschlangenStatus = false;
CounterGO = true;
CounterValue = CounterState(); // Counter-Poti einsesen
}
if (HeizschlangenStatus == true) {
digitalWrite(Heizschlange_KF5, LOW);
digitalWrite(Heizschlange_KF4, LOW);
digitalWrite(Heizschlange_KF3, LOW);
}
if (HeizschlangenStatus == false) {
digitalWrite(Heizschlange_KF5, HIGH);
digitalWrite(Heizschlange_KF4, HIGH);
digitalWrite(Heizschlange_KF3, HIGH);
}
}
//********************************************************************************************************************************
//********************************************************Fertig****************************************************************
void Temperaturstabilisierung_both(double TemperaturSensor_1, double TemperaturSensor_2, double TemperaturSensor_3, double TemperaturSensor_4, double Summe_1, double Summe_2, double Summe_3, double Summe_4, double Summe_5, double Summe_6, double Summe_7, double Summe_8, double Summe_9, double Summe_10, double Summe_11)
{
if (zaehler == 1 && TemperaturSensor_1 || zaehler_2 == 1 && TemperaturSensor_2 || zaehler_3 == 1 && TemperaturSensor_3 || zaehler_4 == 1 && TemperaturSensor_4 || Summe_1 || Summe_2 || Summe_3 || Summe_4 || Summe_5 || Summe_6
|| Summe_7 || Summe_8 || Summe_9 || Summe_10 || Summe_11 < TemperaturValue && !HeizschlangenStatus < TemperaturValue && !HeizschlangenStatus) {
HeizschlangenStatus = true;
}
else if (zaehler == 1 && TemperaturSensor_1 || zaehler_2 == 1 && TemperaturSensor_2 || zaehler_3 == 1 && TemperaturSensor_3 || zaehler_4 == 1 && TemperaturSensor_4 || Summe_1 || Summe_2 || Summe_3 || Summe_4 || Summe_5 || Summe_6
|| Summe_7 || Summe_8 || Summe_9 || Summe_10 || Summe_11 < TemperaturValue && !HeizschlangenStatus >= TemperaturValue && HeizschlangenStatus) {
HeizschlangenStatus = false;
CounterGO = true;
CounterValue = CounterState(); // Counter-Poti einsesen
}
if (HeizschlangenStatus == true) {
digitalWrite(Heizschlange_KF5, LOW);
digitalWrite(Heizschlange_KF4, LOW);
digitalWrite(Heizschlange_KF3, LOW);
digitalWrite(Heizschlange_KF2, LOW);
digitalWrite(Heizschlange_KF1, LOW);
}
if (HeizschlangenStatus == false) {
digitalWrite(Heizschlange_KF5, HIGH);
digitalWrite(Heizschlange_KF4, HIGH);
digitalWrite(Heizschlange_KF3, HIGH);
digitalWrite(Heizschlange_KF2, HIGH);
digitalWrite(Heizschlange_KF1, HIGH);
}
}
//********************************************************************************************************************************
// Hier werden nun NUR diejenigen Werte neu geschrieben, die sich wirklich verändert haben.
//damit ist ein Flackerfreier Betrieb des LCD möglich weil es so viel schneller beschrieben werden kann,
// als wenn es jedesmal komplett gelöscht wird und komplett neu beschrieben werden muss
void updateLCD()
{
/* die static-variablen bleiben beim verlassen von updateLCD erhalten, darin wird der jeweils zuletzt
** geschriebene Wert gesichert , zur Feststellung, ob er sich geändert hat und neu geschrieben werden muss
*/
static int oldCounterValue = -1;
static int oldTemperaturValue = -20;
static bool oldHeizenOben = 0;
static bool oldHeizenUnten = 0;
// CounterValue --> LCD
if (CounterValue != oldCounterValue) {
oldCounterValue = CounterValue; // neuen Wert übernehmen und sichern
LCD2.setCursor(10, 0);
LCD2.print(" "); // 3x space zum löschen des alten Wertes ausgeben
LCD2.setCursor(10, 0);
LCD2.print(CounterValue); // neuen CounterValue schreiben
}
// TempValue --> LCD
if (TemperaturValue != oldTemperaturValue) {
oldTemperaturValue = TemperaturValue;
LCD2.setCursor(13, 1);
LCD2.print(" "); // 3x space zum löschen des alten Wertes ausgeben
LCD2.setCursor(13, 1);
LCD2.print(TemperaturValue); // neuen TempValue schreiben
}
// HeizenOben --> LCD
if (LCD_Variable_HeizenOben != oldHeizenOben) {
oldHeizenOben = LCD_Variable_HeizenOben;
LCD2.setCursor(15, 2);
LCD2.print(HeizschlangenText[LCD_Variable_HeizenOben]);
// je nach dem ob Heizschlange gewählt oder nicht wird "EIN" oder "AUS" aufs LCD gebracht.
}
// HeizenUnten --> LCD
if (LCD_Variable_HeizenUnten != oldHeizenUnten) {
oldHeizenUnten = LCD_Variable_HeizenUnten;
LCD2.setCursor(15, 3);
LCD2.print(HeizschlangenText[LCD_Variable_HeizenUnten]);
// je nach dem ob Heizschlange gewählt oder nicht wird "EIN" oder "AUS" aufs LCD gebracht.
}
}
// LCD mit dem Grundtext beschreiben. dieser Text wird nur zu beginn komplet geschrieben
// beim UpdateLCD werden nur noch die veränderten Werte ans LCD gesendet, dafür aber 50x/Sekunde.
void initLCD() {
LCD2.clear();
LCD2.setCursor(0, 0);
LCD2.print("Counter = ");
LCD2.print(CounterValue);
LCD2.setCursor(13, 0);
LCD2.print("Minuten");
LCD2.setCursor(0, 1);
LCD2.print("Temperatur = ");
LCD2.setCursor(13, 1);
LCD2.print(TemperaturValue);
LCD2.setCursor(17, 1);
LCD2.print("\337C"); // '\337' erzeugt das °-Zeichen auf dem LCD , das 'C' steht nat. für Celsius
LCD2.setCursor(0, 2);
LCD2.print("Heizen oben = AUS");
LCD2.setCursor(0, 3);
LCD2.print("Heizen unten = AUS");
}