Seilbahn/seilbahn_basics/seilbahn_basics.ino

667 lines
23 KiB
C++

//Pindefinitionen
#define LED_ANLAGE_EIN_AUS 2
#define KNOPF_ANLAGE_EIN_AUS 3
#define LED_STATION_BESETZT_UNBESETZT 4
#define KNOPF_STATION_BESETZT_UNBESETZT 5
#define LED_SERVICEBETRIEB 6
#define KNOPF_SERVICEBETRIEB 7
#define LED_FAHRGASTBETRIEB 22
#define KNOPF_FAHRGASTBETRIEB 23
#define LED_ROT_EREIGNISANZEIGE 13
#define LED_GELB_EREIGNISANZEIGE 12
#define LED_GRUEN_EREIGNISANZEIGE 11
#define LED_QUIT_BETRIEB 9
#define KNOPF_QUIT_BETRIEB 10
#define LED_START_BETRIEB 36
#define KNOPF_START_BETRIEB 37
#define LED_HALT 38
#define KNOPF_HALT 39
#define LED_NOTHALT 40
#define KNOPF_NOTHALT 41
#define LED_VORWAERTS 30
#define KNOPF_VORWAERTS 31
#define LED_RUECKWAERTS 32
#define KNOPF_RUECKWAERTS 33
// Hilfsvariablen zum merken des Zustands
bool buttonStateAnlageEinAus = false;
bool currentButtonStateAnlageEinAus = false;
bool buttonStateStationBesetztUnbesetzt = false;
bool currentButtonStateStationBesetztUnbesetzt = false;
bool buttonStateServicebetrieb = false;
bool currentButtonStateServicebetrieb = false;
bool buttonStateFahrgastbetrieb = false;
bool currentButtonStateFahrgastbetrieb = false;
bool buttonStateQuitBetrieb = false;
bool currentButtonStateQuitBetrieb = false;
bool buttonStateStart = false;
bool currentButtonStateStart = false;
bool buttonStateHalt = false;
bool currentButtonStateHalt = false;
bool buttonStateNothalt = false;
bool currentButtonStateNothalt = false;
bool buttonStateVorwaerts = false;
bool currentButtonStateVorwaerts = false;
bool buttonStateRueckwaerts = false;
bool currentButtonStateRueckwaerts = false;
// Anlagenzustände
enum
{
AUS,
SERVICE_QUITTIEREN,
SERVICE,
FAHRGAST_QUITTIEREN,
FAHRGAST,
} anlagenzustand;
// Fahrtrichtungen
enum Fahrtrichtung
{
HALT, // Anlage steht
NOTHALT, // Anlage steht (Notstop)
VORWAERTS_QUITTIEREN, // Richtungsknopf vorwärts gedrückt, warte auf quittieren
WARTE_START_VORWAERTS, // Anlage steht und wartet auf starten (in die entsprechende Richtung)
VORWAERTS, // Anlage fährt vorwärts
RUECKWAERTS_QUITTIEREN, // Richtungsknopf rückwärts gedrückt, warte auf quittieren
WARTE_START_RUECKWAERTS, // Anlage steht und wartet auf starten (in die entsprechende Richtung)
RUECKWAERTS, // Anlage fährt rückwärts
} fahrtrichtung;
Fahrtrichtung vorherigeRichtung = HALT;
void quittierenButtonAbfragen()
{
// ========== Quittieren Button abfragen
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateQuitBetrieb = digitalRead(KNOPF_QUIT_BETRIEB) == LOW;
// Aktuellen Zustand mit vorherigem vergleichen
if (currentButtonStateQuitBetrieb && !buttonStateQuitBetrieb)
{
// Warten zum entprellen
delay(20);
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateQuitBetrieb = digitalRead(KNOPF_QUIT_BETRIEB) == LOW;
// Prüfen ob immernoch gedrückt
if (currentButtonStateQuitBetrieb == LOW)
{
// Knopf gedrückt => Code ausführen
// ============================================================
switch(fahrtrichtung)
{
case HALT:
case NOTHALT:
if(vorherigeRichtung == RUECKWAERTS)
{
fahrtrichtung = WARTE_START_RUECKWAERTS;
}
else
{
fahrtrichtung = WARTE_START_VORWAERTS;
}
break;
case VORWAERTS_QUITTIEREN:
fahrtrichtung = WARTE_START_VORWAERTS;
break;
case RUECKWAERTS_QUITTIEREN:
fahrtrichtung = WARTE_START_RUECKWAERTS;
break;
}
// ============================================================
// Speichern des ButtonStates als Vergleichswert für den nächsten Durchlauf
buttonStateQuitBetrieb = currentButtonStateQuitBetrieb;
}
}
}
void startButtonAbfragen()
{
// ========== Start Button abfragen
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateStart = digitalRead(KNOPF_START_BETRIEB) == LOW;
// Aktuellen Zustand mit vorherigem vergleichen
if (currentButtonStateStart && !buttonStateStart)
{
// Warten zum entprellen
delay(20);
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateStart = digitalRead(KNOPF_START_BETRIEB) == LOW;
// Prüfen ob immernoch gedrückt
if (currentButtonStateStart == LOW)
{
// Knopf gedrückt => Code ausführen
// ============================================================
switch(fahrtrichtung)
{
case WARTE_START_VORWAERTS:
fahrtrichtung = VORWAERTS;
vorherigeRichtung = VORWAERTS;
break;
case WARTE_START_RUECKWAERTS:
fahrtrichtung = RUECKWAERTS;
vorherigeRichtung = RUECKWAERTS;
break;
}
// ============================================================
// Speichern des ButtonStates als Vergleichswert für den nächsten Durchlauf
buttonStateStart = currentButtonStateStart;
}
}
}
// FERTIG
void haltButtonAbfragen()
{
// ========== Start Button abfragen
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateHalt = digitalRead(KNOPF_START_BETRIEB) == LOW;
// Aktuellen Zustand mit vorherigem vergleichen
if (currentButtonStateHalt && !buttonStateHalt)
{
// Warten zum entprellen
delay(20);
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateHalt = digitalRead(KNOPF_START_BETRIEB) == LOW;
// Prüfen ob immernoch gedrückt
if (currentButtonStateHalt == LOW)
{
// Knopf gedrückt => Code ausführen
// ============================================================
fahrtrichtung = HALT;
// ============================================================
// Speichern des ButtonStates als Vergleichswert für den nächsten Durchlauf
buttonStateHalt = currentButtonStateHalt;
}
}
}
//FERTIG
void nothaltButtonAbfragen()
{
// ========== Start Button abfragen
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateNothalt = digitalRead(KNOPF_START_BETRIEB) == LOW;
// Aktuellen Zustand mit vorherigem vergleichen
if (currentButtonStateNothalt && !buttonStateNothalt)
{
// Warten zum entprellen
delay(20);
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateNothalt = digitalRead(KNOPF_START_BETRIEB) == LOW;
// Prüfen ob immernoch gedrückt
if (currentButtonStateNothalt == LOW)
{
// Knopf gedrückt => Code ausführen
// ============================================================
fahrtrichtung = NOTHALT;
// ============================================================
// Speichern des ButtonStates als Vergleichswert für den nächsten Durchlauf
buttonStateNothalt = currentButtonStateNothalt;
}
}
}
//FERTIG
void vorwaertsButtonAbfragen()
{
// ========== Start Button abfragen
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateVorwaerts = digitalRead(KNOPF_START_BETRIEB) == LOW;
// Aktuellen Zustand mit vorherigem vergleichen
if (currentButtonStateVorwaerts && !buttonStateVorwaerts)
{
// Warten zum entprellen
delay(20);
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateVorwaerts = digitalRead(KNOPF_START_BETRIEB) == LOW;
// Prüfen ob immernoch gedrückt
if (currentButtonStateVorwaerts == LOW)
{
// Knopf gedrückt => Code ausführen
// ============================================================
// In jeder beliebigen Fahrtrichtung, Fahrtrichtung Ändern (HALT, NOTHALT, RUECKWAERTS_QUITTIEREN, )
fahrtrichtung = VORWAERTS_QUITTIEREN;
// ============================================================
// Speichern des ButtonStates als Vergleichswert für den nächsten Durchlauf
buttonStateVorwaerts = currentButtonStateVorwaerts;
}
}
}
//FERTIG
void rueckwaertsButtonAbfragen()
{
// ========== Start Button abfragen
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateRueckwaerts = digitalRead(KNOPF_START_BETRIEB) == LOW;
// Aktuellen Zustand mit vorherigem vergleichen
if (currentButtonStateRueckwaerts && !buttonStateRueckwaerts)
{
// Warten zum entprellen
delay(20);
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateRueckwaerts = digitalRead(KNOPF_START_BETRIEB) == LOW;
// Prüfen ob immernoch gedrückt
if (currentButtonStateRueckwaerts == LOW)
{
// Knopf gedrückt => Code ausführen
// ============================================================
fahrtrichtung = RUECKWAERTS_QUITTIEREN;
// ============================================================
// Speichern des ButtonStates als Vergleichswert für den nächsten Durchlauf
buttonStateRueckwaerts = currentButtonStateRueckwaerts;
}
}
}
void setup() {
anlagenzustand = AUS;
fahrtrichtung = HALT;
Serial.begin(9600);
// Pindefinitonen
pinMode(LED_ANLAGE_EIN_AUS, OUTPUT);
pinMode(KNOPF_ANLAGE_EIN_AUS, INPUT_PULLUP);
pinMode(LED_STATION_BESETZT_UNBESETZT, OUTPUT);
pinMode(KNOPF_STATION_BESETZT_UNBESETZT, INPUT_PULLUP);
pinMode(LED_SERVICEBETRIEB, OUTPUT);
pinMode(KNOPF_SERVICEBETRIEB, INPUT_PULLUP);
pinMode(LED_FAHRGASTBETRIEB, OUTPUT);
pinMode(KNOPF_FAHRGASTBETRIEB, INPUT_PULLUP);
pinMode(LED_QUIT_BETRIEB, OUTPUT);
pinMode(KNOPF_QUIT_BETRIEB, INPUT_PULLUP);
pinMode(LED_ROT_EREIGNISANZEIGE, OUTPUT);
pinMode(LED_GELB_EREIGNISANZEIGE, OUTPUT);
pinMode(LED_GRUEN_EREIGNISANZEIGE, OUTPUT);
}
void loop() {
switch(anlagenzustand)
{
// #################### Anlage ausgeschaltet
case AUS:
{
// ========== LEDs entsprechend des Zustands setzen
digitalWrite(LED_ANLAGE_EIN_AUS, LOW);
digitalWrite(LED_STATION_BESETZT_UNBESETZT, LOW);
digitalWrite(LED_SERVICEBETRIEB, LOW);
digitalWrite(LED_FAHRGASTBETRIEB, LOW);
digitalWrite(LED_ROT_EREIGNISANZEIGE, LOW);
digitalWrite(LED_GELB_EREIGNISANZEIGE, LOW);
digitalWrite(LED_GRUEN_EREIGNISANZEIGE, LOW);
digitalWrite(LED_QUIT_BETRIEB, LOW);
// ========== Ein/Aus Button abfragen
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateAnlageEinAus = digitalRead(KNOPF_ANLAGE_EIN_AUS) == LOW;
// Aktuellen Zustand mit vorherigem vergleichen
if (currentButtonStateAnlageEinAus && !buttonStateAnlageEinAus)
{
// Warten zum entprellen
delay(20);
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateAnlageEinAus = digitalRead(KNOPF_ANLAGE_EIN_AUS) == LOW;
// Prüfen ob immernoch gedrückt
if (currentButtonStateAnlageEinAus == LOW)
{
// Anlage in den Zustand "SERVICE" versetzen und damit starten
anlagenzustand = SERVICE;
digitalWrite(LED_ANLAGE_EIN_AUS, HIGH);
digitalWrite(LED_STATION_BESETZT_UNBESETZT, HIGH);
// Speichern des ButtonStates als Vergleichswert für den nächsten Durchlauf
buttonStateAnlageEinAus = currentButtonStateAnlageEinAus;
}
}
break;
}
// #################### Anlage im Service-quittieren Zustand
// Anlage wechselt in den Servicezustand, sobald der Zustandswechsel durch den Nutzer quittiert wird
case SERVICE_QUITTIEREN:
{
// ========== LEDs entsprechend des Zustands setzen
digitalWrite(LED_QUIT_BETRIEB, HIGH);
digitalWrite(LED_GELB_EREIGNISANZEIGE, HIGH);
digitalWrite(LED_GRUEN_EREIGNISANZEIGE, LOW);
// ========== Ein/Aus Button abfragen
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateAnlageEinAus = digitalRead(KNOPF_ANLAGE_EIN_AUS) == LOW;
// Aktuellen Zustand mit vorherigem vergleichen
if (currentButtonStateAnlageEinAus && !buttonStateAnlageEinAus)
{
// Warten zum entprellen
delay(20);
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateAnlageEinAus = digitalRead(KNOPF_ANLAGE_EIN_AUS) == LOW;
// Prüfen ob immernoch gedrückt
if (currentButtonStateAnlageEinAus == LOW)
{
// Anlage in den Zustand "AUS" versetzen und damit stoppen
anlagenzustand = AUS;
// Speichern des ButtonStates als Vergleichswert für den nächsten Durchlauf
buttonStateAnlageEinAus = currentButtonStateAnlageEinAus;
}
}
// ========== Quittieren Button abfragen
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateQuitBetrieb = digitalRead(KNOPF_QUIT_BETRIEB) == LOW;
// Aktuellen Zustand mit vorherigem vergleichen
if (currentButtonStateQuitBetrieb && !buttonStateQuitBetrieb)
{
// Warten zum entprellen
delay(20);
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateQuitBetrieb = digitalRead(KNOPF_QUIT_BETRIEB) == LOW;
// Prüfen ob immernoch gedrückt
if (currentButtonStateQuitBetrieb == LOW)
{
// Anlage in den Zustand "SERVICE" versetzen
anlagenzustand = SERVICE;
digitalWrite(LED_QUIT_BETRIEB, LOW);
// Speichern des ButtonStates als Vergleichswert für den nächsten Durchlauf
buttonStateQuitBetrieb = currentButtonStateQuitBetrieb;
}
}
break;
}
// #################### Anlage im Servicezustand
case SERVICE:
{
// ========== LEDs entsprechend des Zustands setzen
digitalWrite(LED_SERVICEBETRIEB, HIGH);
digitalWrite(LED_FAHRGASTBETRIEB, LOW);
digitalWrite(LED_ROT_EREIGNISANZEIGE, HIGH);
digitalWrite(LED_GELB_EREIGNISANZEIGE, LOW);
digitalWrite(LED_GRUEN_EREIGNISANZEIGE, LOW);
// ========== Fahrtrichtungsabhängige Steuerung
switch(fahrtrichtung)
{
// Anlage steht
case HALT:
{
quittierenButtonAbfragen(); // => "WARTE_START" Anhand Richtung
vorwaertsButtonAbfragen(); // => "VORWAERTS_QUITTIEREN"
rueckwaertsButtonAbfragen(); // => "RUECKWAERTS_QUITTIEREN"
break;
}
// Anlage steht
case NOTHALT:
{
quittierenButtonAbfragen(); // => "WARTE_START"
vorwaertsButtonAbfragen(); // => "VORWAERTS_QUITTIEREN"
rueckwaertsButtonAbfragen(); // => "RUECKWAERTS_QUITTIEREN"
break;
}
// Anlage steht
// Anlage fährt vorwärts
case VORWAERTS_QUITTIEREN:
{
quittierenButtonAbfragen(); // => "WARTE_START_VORWAERTS"
haltButtonAbfragen(); // => "HALT"
nothaltButtonAbfragen(); // => "NOTHALT"
rueckwaertsButtonAbfragen(); // => "RUECKWAERTS_QUITTIEREN"
break;
}
case WARTE_START_VORWAERTS:
{
startButtonAbfragen(); // => "VORWAERTS"
break;
}
// Anlage fährt vorwärts
case VORWAERTS:
{
haltButtonAbfragen(); // => "HALT"
nothaltButtonAbfragen(); // => "NOTHALT"
break;
}
// Anlage fährt rückwärts
case RUECKWAERTS_QUITTIEREN:
{
quittierenButtonAbfragen(); // => "WARTE_START_RUECKWAERTS"
haltButtonAbfragen(); // => "HALT"
nothaltButtonAbfragen(); // => "NOTHALT"
vorwaertsButtonAbfragen(); // => "VORWAERTS_QUITTIEREN"
break;
}
case WARTE_START_RUECKWAERTS:
{
startButtonAbfragen(); // => "RUECKWAERTS"
break;
}
// Anlage fährt rückwärts
case RUECKWAERTS:
{
haltButtonAbfragen(); // => "HALT"
nothaltButtonAbfragen(); // => "NOTHALT"
break;
}
default:
{
break;
}
}
// ========== Ein/Aus Button abfragen
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateAnlageEinAus = digitalRead(KNOPF_ANLAGE_EIN_AUS) == LOW;
// Aktuellen Zustand mit vorherigem vergleichen
if (currentButtonStateAnlageEinAus && !buttonStateAnlageEinAus)
{
// Warten zum entprellen
delay(20);
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateAnlageEinAus = digitalRead(KNOPF_ANLAGE_EIN_AUS) == LOW;
// Prüfen ob immernoch gedrückt
if (currentButtonStateAnlageEinAus == LOW)
{
// Anlage in den Zustand "AUS" versetzen und damit stoppen
anlagenzustand = AUS;
// Speichern des ButtonStates als Vergleichswert für den nächsten Durchlauf
buttonStateAnlageEinAus = currentButtonStateAnlageEinAus;
}
}
// ========== Fahrgast Button abfragen
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateFahrgastbetrieb = digitalRead(KNOPF_FAHRGASTBETRIEB) == LOW;
// Aktuellen Zustand mit vorherigem vergleichen
if (currentButtonStateFahrgastbetrieb && !buttonStateFahrgastbetrieb)
{
// Warten zum entprellen
delay(20);
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateFahrgastbetrieb = digitalRead(KNOPF_FAHRGASTBETRIEB) == LOW;
// Prüfen ob immernoch gedrückt
if (currentButtonStateFahrgastbetrieb == LOW)
{
// Anlage in den Zustand "SERVICE_QUITTIEREN" versetzen
anlagenzustand = SERVICE_QUITTIEREN;
// Speichern des ButtonStates als Vergleichswert für den nächsten Durchlauf
buttonStateFahrgastbetrieb = currentButtonStateFahrgastbetrieb;
}
}
break;
}
// #################### Anlage im Fahrgast-quittieren Zustand
// Anlage wechselt in den Fahrgastzustand, sobald der Zustandswechsel durch den Nutzer quittiert wird
case FAHRGAST_QUITTIEREN:
{
// ========== LEDs entsprechend des Zustands setzen
digitalWrite(LED_QUIT_BETRIEB, HIGH);
digitalWrite(LED_GELB_EREIGNISANZEIGE, HIGH);
digitalWrite(LED_ROT_EREIGNISANZEIGE, LOW);
// ========== Ein/Aus Button abfragen
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateAnlageEinAus = digitalRead(KNOPF_ANLAGE_EIN_AUS) == LOW;
// Aktuellen Zustand mit vorherigem vergleichen
if (currentButtonStateAnlageEinAus && !buttonStateAnlageEinAus)
{
// Warten zum entprellen
delay(20);
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateAnlageEinAus = digitalRead(KNOPF_ANLAGE_EIN_AUS) == LOW;
// Prüfen ob immernoch gedrückt
if (currentButtonStateAnlageEinAus == LOW)
{
// Anlage in den Zustand "AUS" versetzen und damit stoppen
anlagenzustand = AUS;
// Speichern des ButtonStates als Vergleichswert für den nächsten Durchlauf
buttonStateAnlageEinAus = currentButtonStateAnlageEinAus;
}
}
// ========== Quittieren Button abfragen
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateQuitBetrieb = digitalRead(KNOPF_QUIT_BETRIEB) == LOW;
// Aktuellen Zustand mit vorherigem vergleichen
if (currentButtonStateQuitBetrieb && !buttonStateQuitBetrieb)
{
// Warten zum entprellen
delay(20);
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateQuitBetrieb = digitalRead(KNOPF_QUIT_BETRIEB) == LOW;
// Prüfen ob immernoch gedrückt
if (currentButtonStateQuitBetrieb == LOW)
{
// Anlage in den Zustand "SERVICE" versetzen
anlagenzustand = SERVICE;
digitalWrite(LED_QUIT_BETRIEB, LOW);
// Speichern des ButtonStates als Vergleichswert für den nächsten Durchlauf
buttonStateQuitBetrieb = currentButtonStateQuitBetrieb;
}
}
break;
}
// #################### Anlage im Fahrgastzustand
case FAHRGAST:
{
// ========== LEDs entsprechend des Zustands setzen
digitalWrite(LED_SERVICEBETRIEB, LOW);
digitalWrite(LED_FAHRGASTBETRIEB, HIGH);
digitalWrite(LED_GRUEN_EREIGNISANZEIGE, HIGH);
digitalWrite(LED_GELB_EREIGNISANZEIGE, LOW);
// ========== Fahrtrichtungsabhängige Steuerung
switch(fahrtrichtung)
{
// Anlage steht
case STOP:
{
break;
}
// Anlage fährt vorwärts
case VORWAERTS:
{
break;
}
// Anlage fährt rückwärts
case RUECKWAERTS:
{
break;
}
default:
{
break;
}
}
// ========== Vorwärts Button abfragen
vorwaertsButtonAbfragen();
// ========== Ein/Aus Button abfragen
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateAnlageEinAus = digitalRead(KNOPF_ANLAGE_EIN_AUS) == LOW;
// Aktuellen Zustand mit vorherigem vergleichen
if (currentButtonStateAnlageEinAus && !buttonStateAnlageEinAus)
{
// Warten zum entprellen
delay(20);
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateAnlageEinAus = digitalRead(KNOPF_ANLAGE_EIN_AUS) == LOW;
// Prüfen ob immernoch gedrückt
if (currentButtonStateAnlageEinAus == LOW)
{
// Anlage in den Zustand "AUS" versetzen und damit stoppen
anlagenzustand = AUS;
// Speichern des ButtonStates als Vergleichswert für den nächsten Durchlauf
buttonStateAnlageEinAus = currentButtonStateAnlageEinAus;
}
}
// ========== Service Button abfragen
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateServicebetrieb = digitalRead(KNOPF_SERVICEBETRIEB) == LOW;
// Aktuellen Zustand mit vorherigem vergleichen
if (currentButtonStateServicebetrieb && !buttonStateServicebetrieb)
{
// Warten zum entprellen
delay(20);
// Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateServicebetrieb = digitalRead(KNOPF_SERVICEBETRIEB) == LOW;
// Prüfen ob immernoch gedrückt
if (currentButtonStateServicebetrieb == LOW)
{
// Anlage in den Zustand "SERVICE_QUITTIEREN" versetzen
anlagenzustand = SERVICE_QUITTIEREN;
// Speichern des ButtonStates als Vergleichswert für den nächsten Durchlauf
buttonStateServicebetrieb = currentButtonStateServicebetrieb;
}
}
break;
}
// ####################
default:
{
break;
}
}
}