diff --git a/INF/zustandsautomat/zustandsautomat.ino b/INF/zustandsautomat/zustandsautomat.ino new file mode 100644 index 0000000..31e4baf --- /dev/null +++ b/INF/zustandsautomat/zustandsautomat.ino @@ -0,0 +1,108 @@ +enum Zustaende_t { Z0, Z1} Zustand; +enum ampel {r, rg, gr, g } ampelzustand; +bool T_druck; +const int Taster2 = 2, LED_rot = 32; +const int a_rot = 27, a_gelb = 19 , a_gruen =23 ; + +void setup () { + Serial.begin(115200); + Serial.printf("INIT TEXT"); + // pinMode ... für LED und Taster + pinMode(LED_rot, OUTPUT); + pinMode(Taster2, INPUT_PULLUP); + + pinMode(a_rot, OUTPUT); + pinMode(a_gelb, OUTPUT); + pinMode(a_gruen, OUTPUT); + Zustand = Z0; // Anfangszustand (Rot) + ampelzustand = r; + + digitalWrite(a_rot, HIGH); + digitalWrite(a_gelb, HIGH); + digitalWrite(a_gruen, HIGH); + digitalWrite(LED_rot, HIGH); +} + +void loop () { + Einlesen(); + Ampel(); + Automat(); + delay(10); +} + +void Einlesen () { + // Flankenrkennung + static bool Neu, Alt; // static weil lokale Variablen in einer Funktion + Neu = digitalRead(Taster2); + if (Neu == 0 && Alt == 1) { // Taster wurde gedrückt => Low Aktiv + T_druck = true; // Variable für den Automaten + } else { + T_druck = false; + } + Alt = Neu; +} + +void Ampel () { + switch (ampelzustand) { + case r: digitalWrite(a_rot, HIGH); digitalWrite(a_gelb, LOW); digitalWrite(a_gruen, LOW); + Serial.println("rot"); + delay(1000); + ampelzustand = rg; + delay(2500); + break; + case rg: digitalWrite(a_rot, HIGH); digitalWrite(a_gelb, HIGH); digitalWrite(a_gruen, LOW); + Serial.println("rot gelb"); + delay(1000); + ampelzustand = gr; + delay(1000); + break; + case gr: digitalWrite(a_rot, LOW); digitalWrite(a_gelb, LOW); digitalWrite(a_gruen, HIGH); + Serial.println("grün"); + delay(1000); + ampelzustand = g; + delay(1000); + break; + case g: digitalWrite(a_rot, LOW); digitalWrite(a_gelb, HIGH); digitalWrite(a_gruen, LOW); + Serial.println("gelb"); + delay(1000); + ampelzustand = r; + delay(1000); + break; + default: + break; + } +} + +void Automat () { + switch (Zustand) { + case Z0: digitalWrite(LED_rot, LOW); + if (T_druck == true) Zustand = Z1; + break; + case Z1: digitalWrite(LED_rot, HIGH); + if (T_druck == true) Zustand = Z0; + break; + default: + break; + } +} + +void Ausgeben () { + // inwelchen Zuständen soll die erste led an sein? + if (ampelzustand == r || ampelzustand == rg){ + digitalWrite(a_rot, HIGH); + } else { + digitalWrite(a_rot, LOW); + } + // gelb + if (ampelzustand == rg || ampelzustand == g){ + digitalWrite(a_gelb, HIGH); + } else { + digitalWrite(a_gelb, LOW); + } + // grün + if (ampelzustand == gr){ + digitalWrite(a_gruen, HIGH); + } else { + digitalWrite(a_gruen, LOW); + } +} \ No newline at end of file