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 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;
@ -35,6 +49,15 @@ 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;
@ -54,65 +77,150 @@ enum
// Fahrtrichtungen
enum Fahrtrichtung
{
HALT,
NOTHALT,
WARTE_START,
VORWAERTS_QUITTIEREN,
VORWAERTS,
RUECKWAERTS_QUITTIEREN,
RUECKWAERTS,
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;
Fahrtrichtung vorherigeRichtung = HALT;
void quittierenButtonAbfragen()
{
// Button Code [...]
if(fahrtrichtung == NOTHALT || fahrtrichtung == HALT)
// ========== 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)
{
fahrtrichtung = WARTE_START;
}
else if(fahrtrichtung == VORWAERTS_QUITTIEREN)
{
fahrtrichtung = WARTE_START;
}
else if(fahrtrichtung == RUECKWAERTS_QUITTIEREN)
{
fahrtrichtung = WARTE_START;
}
// Button Code [...]
// 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()
{
// Button Code [...]
if(vorherigerichtung == VORWAERTS)
// ========== 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)
{
fahrtrichtung = RUECKWAERTS;
}
else if(vorherigerichtung == RUECKWAERTS)
{
fahrtrichtung = VORWAERTS;
}
else
{
fahrtrichtung = VORWAERTS;
}
// Button Code [...]
// 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()
{
// Button Code [...]
fahrtrichtung = HALT;
// 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;
// ============================================================
// Speichern des ButtonStates als Vergleichswert für den nächsten Durchlauf
buttonStateHalt = currentButtonStateHalt;
}
}
}
//FERTIG
void nothaltButtonAbfragen()
{
// Button Code [...]
fahrtrichtung = NOTHALT;
// 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;
// ============================================================
// Speichern des ButtonStates als Vergleichswert für den nächsten Durchlauf
buttonStateNothalt = currentButtonStateNothalt;
}
}
}
//FERTIG
@ -133,8 +241,9 @@ void vorwaertsButtonAbfragen()
{
// Knopf gedrückt => Code ausführen
// ============================================================
fahrtrichtung = VORWAERTS_QUITTIEREN;
// ============================================================
// 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;
}
@ -159,8 +268,8 @@ void rueckwaertsButtonAbfragen()
{
// Knopf gedrückt => Code ausführen
// ============================================================
fahrtrichtung = RUECKWAERTS_QUITTIEREN;
// ============================================================
fahrtrichtung = RUECKWAERTS_QUITTIEREN;
// ============================================================
// Speichern des ButtonStates als Vergleichswert für den nächsten Durchlauf
buttonStateRueckwaerts = currentButtonStateRueckwaerts;
}
@ -284,7 +393,6 @@ void loop() {
buttonStateQuitBetrieb = currentButtonStateQuitBetrieb;
}
}
break;
}
@ -304,48 +412,64 @@ void loop() {
// Anlage steht
case HALT:
{
quittierenButtonAbfragen();
vorwaertsButtonAbfragen();
rueckwaertsButtonAbfragen();
quittierenButtonAbfragen(); // => "WARTE_START" Anhand Richtung
vorwaertsButtonAbfragen(); // => "VORWAERTS_QUITTIEREN"
rueckwaertsButtonAbfragen(); // => "RUECKWAERTS_QUITTIEREN"
break;
}
// Anlage steht
case NOTHALT:
{
quittierenButtonAbfragen();
vorwaertsButtonAbfragen();
rueckwaertsButtonAbfragen();
quittierenButtonAbfragen(); // => "WARTE_START"
vorwaertsButtonAbfragen(); // => "VORWAERTS_QUITTIEREN"
rueckwaertsButtonAbfragen(); // => "RUECKWAERTS_QUITTIEREN"
break;
}
// Anlage steht
case WARTE_START:
{
startButtonAbfragen();
break;
}
// 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();
nothaltButtonAbfragen();
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();
nothaltButtonAbfragen();
haltButtonAbfragen(); // => "HALT"
nothaltButtonAbfragen(); // => "NOTHALT"
break;
}
default:
@ -469,13 +593,13 @@ void loop() {
break;
}
// Anlage fährt vorwärts
case VORWÄRTS:
case VORWAERTS:
{
break;
}
// Anlage fährt rückwärts
case RÜCKWÄRTS:
case RUECKWAERTS:
{
break;