void setup()
// Definition der Eingänge:
#define S0 43 // START TASTER NO
#define S1 23 // Meldung Behälter leer (NC)
#define S2 27 // Meldung Niveau 1 erreicht (NO)
#define S3 31 // Meldung Niveau 2 erreicht (NO)
#define S4 35 // Meldung Temperatur erreicht (NO)
#define S5 39 // Meldung Überdruck erreicht (NO)
#define S6 45 // Taster Rücksetzung (NO)
// Definition der Ausgänge:
#define Q1 26 // Zulaufventil 1
#define Q2 30 // Zulaufventil 2
#define Q3 22 // Ablassventil
#define Q4 38 // Druckablassventil
#define H1 34 // Heizung
#define M1 24 // Rührmotor
}
void loop()
// put your main code here, to run repeatedly:
// Zuweisung der Variablen mit Datentypen und Anfangswert
// Zuweisung Eingänge:
bool S_0 = false;
bool S_1 = false;
bool S_2 = false;
bool S_3 = false;
bool S_4 = false;
bool S_5 = false;
bool S_6 = false;
// Zuweisung der Ausgänge:
bool Q_1 = false;
bool Q_2 = false;
bool Q_3 = false;
bool Q_4 = false;
bool H_1 = false;
bool M_1 = false;
// Startwert Zeit 1
long unsigned int Startwert1 = 0;
// Startwert Zeit 2
long unsigned int Startwert2 = 0;
// Wert der Schrittkette / Schrittkette zu Anfang auf 0 Setzen:
int schritt = 0;
// Festlegung der PIN-Modes:
//Pinmodes Eingang:
pinMode(S0,INPUT);
pinMode(S1,INPUT);
pinMode(S2,INPUT);
pinMode(S3,INPUT);
pinMode(S4,INPUT);
pinMode(S5,INPUT);
pinMode(S6,INPUT);
// PinModes Ausgang:
pinMode(Q1,OUTPUT);
pinMode(Q2,OUTPUT);
pinMode(Q3,OUTPUT);
pinMode(Q4,OUTPUT);
pinMode(H1,OUTPUT);
pinMode(M1,OUTPUT);
// Erstellung des Eingangsabbild, Anfang des Programmes:
// Festlegung Öfnner Schließer:
S_0 = digitalRead(S0);
S_1 = !digitalRead(S1);
S_2 = digitalRead(S2);
S_3 = digitalRead(S3);
S_4 = digitalRead(S4);
S_5 = digitalRead(S5);
S_6 = digitalRead(S6);
// Rücksetzen der Schrittkette durch Reset:
if (S_6)
{
schritt=0;
}
// Schrittketten mit Transitionsbedingungen:
{
// Grundschritt
case 0
{
if (S_0 and S_1 and !S_4 and !S_5)
{
schritt=1;
}
break;
// Schritt 1
case 1:
{
if(S_2)
{
Schritt=2;
}
}
break;
// Schritt 2
case 2:
{
if (S_3)
{
schritt=3;
}
}
break;
// Schritt 3
case 3:
{
if(S_4)
{
schritt=4;
}
}
break;
//Schritt 4
case 4:
{
if (S_1)
{
schritt=0
}
}
break;
}
// Programmierung der einzelnen Aktionen:
// Für Schritt 0
if (schritt==0)
{
M_1=false;
}
// Für Schritt 1
if (schritt==1)
{
Q_1=true;
}
else
{
Q_1=false;
}
// Für Schritt 2
if (Schritt==2)
{
Q_2=true;
}
else
{
Q_2=false;
}
if (schritt==2)
{
M_1=true;
}
// timer set
if (schritt==2)
{
Startwert1=millis();
}
// Für Schritt 3
if (schritt==3 and (millis()>Startwert1+ 5000))
{
H_1=true;
}
else
{
H_1=false;
}
// Timer set
if (schritt==3)
{
Startwert2=millis();
}
//Für Schritt 3 & 4
if ((schritt==3 or schritt==4) and S_5)
{
Q_4=true;
}
else
Q_4=false;
}
// Für Schritt 4
if (schritt==4 and (millis()>Startwert2+10000))
{
M_1=false;
}
if (schritt==4 and !S_1 and (millis()>Startwert2+10000))
{
Q_3=true;
}
else
{
Q_3=false;
}
// Ansteuerung von Ausgängen
if (Q_1)
{
digitalWrite(Q1,HIGH);
}
else
{
digitalWrite(Q1,LOW);
}
if (Q_2)
{
digitalWrite(Q2,HIGH);
}
else
{
digitalWrite(Q2,LOW);
}
if (Q_3)
{
digitalWrite(Q3,HIGH);
}
else
{
digitalWrite(Q3,LOW);
}
if (Q_4)
{
digitalWrite(Q4,HIGH);
}
else
{
digitalWrite(Q4,LOW);
}
if (H1)
{
digitalWrite(H1,HIGH);
}
else
{
digitalWrite(H1,LOW);
}
if (M1)
{
digitalWrite(M1,HIGH);
}
else
{
digitalWrite(M1,LOW);
}
}