Erste Entwürfe einer Version mit state machine
This commit is contained in:
parent
cf91dc0f7f
commit
b0fa3ed6c5
209
seilbahn_basics/seilbahn_basics.ino
Normal file
209
seilbahn_basics/seilbahn_basics.ino
Normal file
@ -0,0 +1,209 @@
|
||||
//Pindefinitionen
|
||||
#define BTN_ONOFF 2
|
||||
#define BTN_SERVICE 3
|
||||
#define BTN_FAHRGAST 4
|
||||
#define BTN_QUIT 5
|
||||
|
||||
#define LED_ONOFF 8
|
||||
#define LED_SERVICE 9
|
||||
#define LED_FAHRGAST 10
|
||||
#define LED_QUIT 11
|
||||
|
||||
// Hilfsvariablen zum merken des Zustands
|
||||
bool currentButtonStateAnlageEinAus;
|
||||
bool buttonStateAnlageEinAus;
|
||||
|
||||
bool currentButtonStateService;
|
||||
bool buttonStateService;
|
||||
|
||||
bool currentButtonStateFahrgast;
|
||||
bool buttonStateFahrgast;
|
||||
|
||||
bool currentButtonStateQuit;
|
||||
bool buttonStateQuit;
|
||||
|
||||
// Anlagenzustände
|
||||
enum
|
||||
{
|
||||
AUS,
|
||||
SERVICE_QUITTIEREN,
|
||||
SERVICE,
|
||||
FAHRGAST_QUITTIEREN,
|
||||
FAHRGAST,
|
||||
} anlagenzustand;
|
||||
|
||||
|
||||
void setup() {
|
||||
anlagenzustand = AUS;
|
||||
// TODO: pinMode
|
||||
}
|
||||
|
||||
void loop() {
|
||||
|
||||
|
||||
switch(anlagenzustand)
|
||||
{
|
||||
// #################### Anlage ausgeschaltet
|
||||
|
||||
case AUS:
|
||||
{
|
||||
// ========== LEDs entsprechend des Zustands setzen
|
||||
digitalWrite(LED_ONOFF, LOW);
|
||||
digitalWrite(LED_SERVICE, LOW);
|
||||
digitalWrite(LED_FAHRGAST, LOW);
|
||||
digitalWrite(LED_QUIT, LOW);
|
||||
|
||||
// ========== Ein/Aus Button abfragen
|
||||
currentButtonStateAnlageEinAus = digitalRead(BTN_ONOFF) == LOW; // Taster abfragen und aktuellen Zustand zwischenspeichern
|
||||
if (currentButtonStateAnlageEinAus && !buttonStateAnlageEinAus) // Aktuellen Zustand mit vorherigem vergleichen
|
||||
{
|
||||
delay(20); // Warten zum entprellen
|
||||
currentButtonStateAnlageEinAus = digitalRead(BTN_ONOFF) == LOW; // Taster abfragen und aktuellen Zustand zwischenspeichern
|
||||
if(currentButtonStateAnlageEinAus == LOW) // Prüfen ob immernoch gedrückt
|
||||
{
|
||||
// Taster erfolgreich gedrückt => Anlage einschalten
|
||||
digitalWrite(LED_ONOFF, HIGH); // Betriebs LED einschalten
|
||||
anlagenzustand = SERVICE; // Anlage in den Zustand "SERVICE" versetzen und damit starten
|
||||
}
|
||||
buttonStateAnlageEinAus = currentButtonStateAnlageEinAus;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// #################### Anlage im Service-quittieren Zustand
|
||||
// Anlage wechselt in den Fahrgastzustand, sobald der Zustandswechsel durch den Nutzer quittiert wird
|
||||
|
||||
case SERVICE_QUITTIEREN:
|
||||
{
|
||||
// ========== LEDs entsprechend des Zustands setzen
|
||||
digitalWrite(LED_QUIT, HIGH);
|
||||
|
||||
// ========== Quittieren Button abfragen
|
||||
currentButtonStateQuit = digitalRead(BTN_QUIT) == LOW; // Taster abfragen und aktuellen Zustand zwischenspeichern
|
||||
if (currentButtonStateQuit && !buttonStateQuit) // Aktuellen Zustand mit vorherigem vergleichen
|
||||
{
|
||||
delay(20); // Warten zum entprellen
|
||||
currentButtonStateQuit = digitalRead(BTN_QUIT) == LOW; // Taster abfragen und aktuellen Zustand zwischenspeichern
|
||||
if(currentButtonStateQuit == LOW) // Prüfen ob immernoch gedrückt
|
||||
{
|
||||
// Taster erfolgreich gedrückt => Zustand wechseln
|
||||
digitalWrite(LED_QUIT, LOW); // LED_QUIT ausschalten
|
||||
anlagenzustand = SERVICE; // Anlage in den Zustand "SERVICE" versetzen
|
||||
}
|
||||
buttonStateQuit = currentButtonStateQuit;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// #################### Anlage im Servicezustand
|
||||
|
||||
case SERVICE:
|
||||
{
|
||||
// ========== LEDs entsprechend des Zustands setzen
|
||||
digitalWrite(LED_SERVICE, HIGH);
|
||||
digitalWrite(LED_FAHRGAST, LOW);
|
||||
|
||||
// ========== Ein/Aus Button abfragen
|
||||
currentButtonStateAnlageEinAus = digitalRead(BTN_ONOFF) == LOW; // Taster abfragen und aktuellen Zustand zwischenspeichern
|
||||
if (currentButtonStateAnlageEinAus && !buttonStateAnlageEinAus) // Aktuellen Zustand mit vorherigem vergleichen
|
||||
{
|
||||
delay(20); // Warten zum entprellen
|
||||
currentButtonStateAnlageEinAus = digitalRead(BTN_ONOFF) == LOW; // Taster abfragen und aktuellen Zustand zwischenspeichern
|
||||
if(currentButtonStateAnlageEinAus == LOW) // Prüfen ob immernoch gedrückt
|
||||
{
|
||||
// Taster erfolgreich gedrückt => Anlage ausschalten
|
||||
anlagenzustand = AUS; // Anlage in den Zustand "AUS" versetzen und damit starten
|
||||
}
|
||||
buttonStateAnlageEinAus = currentButtonStateAnlageEinAus;
|
||||
}
|
||||
|
||||
// ========== Fahrgast Button abfragen
|
||||
currentButtonStateFahrgast = digitalRead(BTN_FAHRGAST) == LOW; // Taster abfragen und aktuellen Zustand zwischenspeichern
|
||||
if (currentButtonStateFahrgast && !buttonStateFahrgast) // Aktuellen Zustand mit vorherigem vergleichen
|
||||
{
|
||||
delay(20); // Warten zum entprellen
|
||||
currentButtonStateFahrgast = digitalRead(BTN_FAHRGAST) == LOW; // Taster abfragen und aktuellen Zustand zwischenspeichern
|
||||
if(currentButtonStateFahrgast == LOW) // Prüfen ob immernoch gedrückt
|
||||
{
|
||||
// Taster erfolgreich gedrückt => Zustand wechseln
|
||||
anlagenzustand = FAHRGAST_QUITTIEREN; // Anlage in den Zustand "FAHRGAST_QUITTIEREN" versetzen
|
||||
}
|
||||
buttonStateFahrgast = currentButtonStateFahrgast;
|
||||
}
|
||||
|
||||
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, HIGH);
|
||||
|
||||
// ========== Quittieren Button abfragen
|
||||
currentButtonStateQuit = digitalRead(BTN_QUIT) == LOW; // Taster abfragen und aktuellen Zustand zwischenspeichern
|
||||
if (currentButtonStateQuit && !buttonStateQuit) // Aktuellen Zustand mit vorherigem vergleichen
|
||||
{
|
||||
delay(20); // Warten zum entprellen
|
||||
currentButtonStateQuit = digitalRead(BTN_QUIT) == LOW; // Taster abfragen und aktuellen Zustand zwischenspeichern
|
||||
if(currentButtonStateQuit == LOW) // Prüfen ob immernoch gedrückt
|
||||
{
|
||||
// Taster erfolgreich gedrückt => Zustand wechseln
|
||||
digitalWrite(LED_QUIT, LOW); // LED_QUIT ausschalten
|
||||
anlagenzustand = FAHRGAST; // Anlage in den Zustand "FAHRGAST" versetzen
|
||||
}
|
||||
buttonStateQuit = currentButtonStateQuit;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// #################### Anlage im Fahrgastzustand
|
||||
|
||||
case FAHRGAST:
|
||||
{
|
||||
// ========== LEDs entsprechend des Zustands setzen
|
||||
digitalWrite(LED_SERVICE, LOW);
|
||||
digitalWrite(LED_FAHRGAST, HIGH);
|
||||
|
||||
// ========== Ein/Aus Button abfragen
|
||||
currentButtonStateAnlageEinAus = digitalRead(BTN_ONOFF) == LOW; // Taster abfragen und aktuellen Zustand zwischenspeichern
|
||||
if (currentButtonStateAnlageEinAus && !buttonStateAnlageEinAus) // Aktuellen Zustand mit vorherigem vergleichen
|
||||
{
|
||||
delay(20); // Warten zum entprellen
|
||||
currentButtonStateAnlageEinAus = digitalRead(BTN_ONOFF) == LOW; // Taster abfragen und aktuellen Zustand zwischenspeichern
|
||||
if(currentButtonStateAnlageEinAus == LOW) // Prüfen ob immernoch gedrückt
|
||||
{
|
||||
// Taster erfolgreich gedrückt => Anlage ausschalten
|
||||
anlagenzustand = AUS; // Anlage in den Zustand "AUS" versetzen und damit starten
|
||||
}
|
||||
buttonStateAnlageEinAus = currentButtonStateAnlageEinAus;
|
||||
}
|
||||
|
||||
// ========== Service Button abfragen
|
||||
currentButtonStateService = digitalRead(BTN_SERVICE) == LOW; // Taster abfragen und aktuellen Zustand zwischenspeichern
|
||||
if (currentButtonStateService && !buttonStateService) // Aktuellen Zustand mit vorherigem vergleichen
|
||||
{
|
||||
delay(20); // Warten zum entprellen
|
||||
currentButtonStateService = digitalRead(BTN_SERVICE) == LOW; // Taster abfragen und aktuellen Zustand zwischenspeichern
|
||||
if(currentButtonStateService == LOW) // Prüfen ob immernoch gedrückt
|
||||
{
|
||||
// Taster erfolgreich gedrückt => Zustand wechseln
|
||||
anlagenzustand = SERVICE_QUITTIEREN; // Anlage in den Zustand "SERVICE_QUITTIEREN" versetzen
|
||||
}
|
||||
buttonStateService = currentButtonStateService;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// ####################
|
||||
default:
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user