Semi finished untested prototype

This commit is contained in:
Julian Appel 2025-12-29 21:36:34 +01:00
parent 107ad934a4
commit 3268d094b8

View File

@ -18,6 +18,20 @@
#define LED_QUIT_BETRIEB 9 #define LED_QUIT_BETRIEB 9
#define KNOPF_QUIT_BETRIEB 10 #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 // Hilfsvariablen zum merken des Zustands
bool buttonStateAnlageEinAus = false; bool buttonStateAnlageEinAus = false;
@ -35,6 +49,15 @@ bool currentButtonStateFahrgastbetrieb = false;
bool buttonStateQuitBetrieb = false; bool buttonStateQuitBetrieb = false;
bool currentButtonStateQuitBetrieb = 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 buttonStateVorwaerts = false;
bool currentButtonStateVorwaerts = false; bool currentButtonStateVorwaerts = false;
@ -54,65 +77,150 @@ enum
// Fahrtrichtungen // Fahrtrichtungen
enum Fahrtrichtung enum Fahrtrichtung
{ {
HALT, HALT, // Anlage steht
NOTHALT, NOTHALT, // Anlage steht (Notstop)
WARTE_START, VORWAERTS_QUITTIEREN, // Richtungsknopf vorwärts gedrückt, warte auf quittieren
VORWAERTS_QUITTIEREN, WARTE_START_VORWAERTS, // Anlage steht und wartet auf starten (in die entsprechende Richtung)
VORWAERTS, VORWAERTS, // Anlage fährt vorwärts
RUECKWAERTS_QUITTIEREN, RUECKWAERTS_QUITTIEREN, // Richtungsknopf rückwärts gedrückt, warte auf quittieren
RUECKWAERTS, WARTE_START_RUECKWAERTS, // Anlage steht und wartet auf starten (in die entsprechende Richtung)
RUECKWAERTS, // Anlage fährt rückwärts
} fahrtrichtung; } fahrtrichtung;
Fahrtrichtung vorherigerichtung = HALT; Fahrtrichtung vorherigeRichtung = HALT;
void quittierenButtonAbfragen() void quittierenButtonAbfragen()
{ {
// Button Code [...] // ========== Quittieren Button abfragen
if(fahrtrichtung == NOTHALT || fahrtrichtung == HALT) // Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateQuitBetrieb = digitalRead(KNOPF_QUIT_BETRIEB) == LOW;
// Aktuellen Zustand mit vorherigem vergleichen
if (currentButtonStateQuitBetrieb && !buttonStateQuitBetrieb)
{ {
fahrtrichtung = WARTE_START; // Warten zum entprellen
} delay(20);
else if(fahrtrichtung == VORWAERTS_QUITTIEREN) // Taster abfragen und aktuellen Zustand zwischenspeichern
currentButtonStateQuitBetrieb = digitalRead(KNOPF_QUIT_BETRIEB) == LOW;
// Prüfen ob immernoch gedrückt
if (currentButtonStateQuitBetrieb == LOW)
{ {
fahrtrichtung = WARTE_START; // Knopf gedrückt => Code ausführen
} // ============================================================
else if(fahrtrichtung == RUECKWAERTS_QUITTIEREN) switch(fahrtrichtung)
{ {
fahrtrichtung = WARTE_START; 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;
}
} }
// Button Code [...]
} }
void startButtonAbfragen() void startButtonAbfragen()
{ {
// Button Code [...] // ========== Start Button abfragen
if(vorherigerichtung == VORWAERTS) // 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; fahrtrichtung = RUECKWAERTS;
vorherigeRichtung = RUECKWAERTS;
break;
} }
else if(vorherigerichtung == RUECKWAERTS) // ============================================================
{ // Speichern des ButtonStates als Vergleichswert für den nächsten Durchlauf
fahrtrichtung = VORWAERTS; buttonStateStart = currentButtonStateStart;
} }
else
{
fahrtrichtung = VORWAERTS;
} }
// Button Code [...]
} }
// FERTIG
void haltButtonAbfragen() void haltButtonAbfragen()
{ {
// Button Code [...] // ========== 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; fahrtrichtung = HALT;
// Button Code [...] // ============================================================
// Speichern des ButtonStates als Vergleichswert für den nächsten Durchlauf
buttonStateHalt = currentButtonStateHalt;
}
}
} }
//FERTIG
void nothaltButtonAbfragen() void nothaltButtonAbfragen()
{ {
// Button Code [...] // ========== 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; fahrtrichtung = NOTHALT;
// Button Code [...] // ============================================================
// Speichern des ButtonStates als Vergleichswert für den nächsten Durchlauf
buttonStateNothalt = currentButtonStateNothalt;
}
}
} }
//FERTIG //FERTIG
@ -133,6 +241,7 @@ void vorwaertsButtonAbfragen()
{ {
// Knopf gedrückt => Code ausführen // Knopf gedrückt => Code ausführen
// ============================================================ // ============================================================
// In jeder beliebigen Fahrtrichtung, Fahrtrichtung Ändern (HALT, NOTHALT, RUECKWAERTS_QUITTIEREN, )
fahrtrichtung = VORWAERTS_QUITTIEREN; fahrtrichtung = VORWAERTS_QUITTIEREN;
// ============================================================ // ============================================================
// Speichern des ButtonStates als Vergleichswert für den nächsten Durchlauf // Speichern des ButtonStates als Vergleichswert für den nächsten Durchlauf
@ -284,7 +393,6 @@ void loop() {
buttonStateQuitBetrieb = currentButtonStateQuitBetrieb; buttonStateQuitBetrieb = currentButtonStateQuitBetrieb;
} }
} }
break; break;
} }
@ -304,48 +412,64 @@ void loop() {
// Anlage steht // Anlage steht
case HALT: case HALT:
{ {
quittierenButtonAbfragen(); quittierenButtonAbfragen(); // => "WARTE_START" Anhand Richtung
vorwaertsButtonAbfragen(); vorwaertsButtonAbfragen(); // => "VORWAERTS_QUITTIEREN"
rueckwaertsButtonAbfragen(); rueckwaertsButtonAbfragen(); // => "RUECKWAERTS_QUITTIEREN"
break; break;
} }
// Anlage steht // Anlage steht
case NOTHALT: case NOTHALT:
{ {
quittierenButtonAbfragen(); quittierenButtonAbfragen(); // => "WARTE_START"
vorwaertsButtonAbfragen(); vorwaertsButtonAbfragen(); // => "VORWAERTS_QUITTIEREN"
rueckwaertsButtonAbfragen(); rueckwaertsButtonAbfragen(); // => "RUECKWAERTS_QUITTIEREN"
break; break;
} }
// Anlage steht // Anlage steht
case WARTE_START:
{
startButtonAbfragen();
break;
}
// Anlage fährt vorwärts // Anlage fährt vorwärts
case VORWAERTS_QUITTIEREN: case VORWAERTS_QUITTIEREN:
{ {
quittierenButtonAbfragen(); // => "WARTE_START_VORWAERTS"
haltButtonAbfragen(); // => "HALT"
nothaltButtonAbfragen(); // => "NOTHALT"
rueckwaertsButtonAbfragen(); // => "RUECKWAERTS_QUITTIEREN"
break;
}
case WARTE_START_VORWAERTS:
{
startButtonAbfragen(); // => "VORWAERTS"
break; break;
} }
// Anlage fährt vorwärts // Anlage fährt vorwärts
case VORWAERTS: case VORWAERTS:
{ {
haltButtonAbfragen(); haltButtonAbfragen(); // => "HALT"
nothaltButtonAbfragen(); nothaltButtonAbfragen(); // => "NOTHALT"
break; break;
} }
// Anlage fährt rückwärts // Anlage fährt rückwärts
case RUECKWAERTS_QUITTIEREN: case RUECKWAERTS_QUITTIEREN:
{ {
quittierenButtonAbfragen(); // => "WARTE_START_RUECKWAERTS"
haltButtonAbfragen(); // => "HALT"
nothaltButtonAbfragen(); // => "NOTHALT"
vorwaertsButtonAbfragen(); // => "VORWAERTS_QUITTIEREN"
break;
}
case WARTE_START_RUECKWAERTS:
{
startButtonAbfragen(); // => "RUECKWAERTS"
break; break;
} }
// Anlage fährt rückwärts // Anlage fährt rückwärts
case RUECKWAERTS: case RUECKWAERTS:
{ {
haltButtonAbfragen(); haltButtonAbfragen(); // => "HALT"
nothaltButtonAbfragen(); nothaltButtonAbfragen(); // => "NOTHALT"
break; break;
} }
default: default:
@ -469,13 +593,13 @@ void loop() {
break; break;
} }
// Anlage fährt vorwärts // Anlage fährt vorwärts
case VORWÄRTS: case VORWAERTS:
{ {
break; break;
} }
// Anlage fährt rückwärts // Anlage fährt rückwärts
case RÜCKWÄRTS: case RUECKWAERTS:
{ {
break; break;