zustandsautomat mit-augabe/schrieb
This commit is contained in:
108
INF/zustandsautomat/zustandsautomat.ino
Normal file
108
INF/zustandsautomat/zustandsautomat.ino
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user