//
//
const int switch1pin1 = 2; // Konfiguriere digitalen Pin 2 für die Steuerung von Schalter 1
const int switch1pin2 = 3; // Konfiguriere digitalen Pin 3 für die Steuerung von Schalter 1
const int switch2pin1 = 4; // Konfiguriere digitalen Pin 4 für die Steuerung von Schalter 2
const int switch2pin2 = 5; // Konfiguriere digitalen Pin 5 für die Steuerung von Schalter 2
const int button1 = A0; // Konfiguriere analogen Pin A0 für das Lesen von Taste 1
const int button2 = A1; // Konfiguriere analogen Pin A1 für das Lesen von Taste 2
int State1 = 0; // Setzt den Wert für den Zustand von Schalter 1
int State2 = 0; // Setzt den Wert für den Zustand von Schalter 2
void setup() {
Serial.begin(9600); // Initialisiere die Serielle Kommunikation mit einer Baudrate von 9600
pinMode(switch1pin1, OUTPUT);
pinMode(switch1pin2, OUTPUT);
pinMode(switch2pin1, OUTPUT);
pinMode(switch2pin2, OUTPUT); // Konfiguriere unsere digitalen Pins als Ausgänge
}
// Definiere die verschiedenen Zustände, die der Arduino durchlaufen kann
enum SWITCHSTATES {
ST_OFF, // Aus
ST_STRAIGHT1, // Gerade 1
ST_TURN1, // Kurve 1
ST_STRAIGHT2, // Gerade 2
ST_TURN2 // Kurve 2
};
SWITCHSTATES switchState = ST_OFF; // Initialisiere den Anfangszustand als "Aus"
void loop() {
Serial.println("Zustand 1");
Serial.println(State1); // Zeige im Seriellen Monitor den Zustand von Zustand 1 an, mit dem Text "Zustand 1" davor
Serial.println("Zustand 2");
Serial.println(State2); // Zeige im Seriellen Monitor den Zustand von Zustand 2 an, mit dem Text "Zustand 2" davor
int Button1Read = analogRead(button1); // Speichere den Wert für Taste 1
int Button2Read = analogRead(button2); // Speichere den Wert für Taste 2
Serial.println("Taste 1");
Serial.println(Button1Read); // Zeige im Seriellen Monitor den Zustand von Taste 1 an, mit dem Text "Taste 1" davor
Serial.println("Taste 2");
Serial.println(Button2Read); // Zeige im Seriellen Monitor den Zustand von Taste 2 an, mit dem Text "Taste 2" davor
delay(200); // Pause von 0,2 Sekunden zwischen den Ablesungen
// Führe je nach aktuellem Zustand eine entsprechende Aktion aus
switch (switchState) {
case ST_OFF:
switchoff(Button1Read, Button2Read);
break;
case ST_STRAIGHT1:
switchstraight1(Button1Read, Button2Read);
break;
case ST_TURN1:
switchturn1(Button1Read, Button2Read);
break;
case ST_STRAIGHT2:
switchstraight2(Button1Read, Button2Read);
break;
case ST_TURN2:
switchturn2(Button1Read, Button2Read);
break;
}
}
// Funktion für den Zustand "Aus"
void switchoff(int Button1Read, int Button2Read) {
digitalWrite(switch1pin1, LOW);
digitalWrite(switch1pin2, LOW);
digitalWrite(switch2pin1, LOW);
digitalWrite(switch2pin2, LOW); // Alle Weichen werden ausgeschaltet
// Überprüfe die Zustände der Tasten und ändere den Zustand entsprechend
if ((Button1Read > 500) && (State1 == 1)) {
switchState = ST_STRAIGHT1; // Gehe zu Gerade 1 bei Tastendruck
}
if ((Button1Read > 500) && (State1 == 0)) {
switchState = ST_TURN1; // Gehe zu Kurve 1 bei Tastendruck
}
if ((Button2Read > 500) && (State2 == 1)) {
switchState = ST_STRAIGHT2; // Gehe zu Gerade 2 bei Tastendruck
}
if ((Button2Read > 500) && (State2 == 0)) {
switchState = ST_TURN2; // Gehe zu Kurve 2 bei Tastendruck
}
}
// Funktion für den Zustand "Gerade 1"
void switchstraight1(int Button1Read, int Button2Read) {
digitalWrite(switch1pin1, HIGH); // Weiche wird in Gerade-Position geschaltet
digitalWrite(switch1pin2, LOW);
digitalWrite(switch2pin1, LOW);
digitalWrite(switch2pin2, LOW);
delay(500); // Weiche bleibt für 0,5 Sekunden in dieser Position
State1 = 0; // Zustand wird auf 0 gesetzt
switchState = ST_OFF; // Gehe zurück zum Ausgangszustand
}
// Funktion für den Zustand "Kurve 1"
void switchturn1(int Button1Read, int Button2Read) {
digitalWrite(switch1pin1, LOW);
digitalWrite(switch1pin2, HIGH); // Weiche wird in Kurven-Position geschaltet
digitalWrite(switch2pin1, LOW);
digitalWrite(switch2pin2, LOW);
delay(500); // Weiche bleibt für 0,5 Sekunden in dieser Position
State1 = 1; // Zustand wird auf 1 gesetzt
switchState = ST_OFF; // Gehe zurück zum Ausgangszustand
}
// Funktion für den Zustand "Gerade 2"
void switchstraight2(int Button1Read, int Button2Read) {
digitalWrite(switch1pin1, LOW);
digitalWrite(switch1pin2, LOW);
digitalWrite(switch2pin1, HIGH); // Weiche wird in Gerade-Position geschaltet
digitalWrite(switch2pin2, LOW);
delay(500); // Weiche bleibt für 0,5 Sekunden in dieser Position
State2 = 0; // Zustand wird auf 0 gesetzt
switchState = ST_OFF; // Gehe zurück zum Ausgangszustand
}
void switchturn2(int Button1Read, int Button2Read){
digitalWrite(switch1pin1,LOW);
digitalWrite(switch1pin2,LOW);
digitalWrite(switch2pin1,LOW);
digitalWrite(switch2pin2,HIGH); //schaltet die Weiche ein
delay(500); // Weiche bleibt für 0,5 Sekunden in dieser Position
State2 = 1; // Zustand wird auf 1 gesetzt
switchState = ST_OFF; // Gehe zurück zum Ausgangszustand
}