#include <Arduino.h>
int ampelLinks[] = {15, 2, 0}; // 15 = rot, 2 = gelb, 0 = grün
int ampelRechts[] = {16, 17, 18}; // 16 = rot, 17 = gelb, 18 = grün
bool requestLinks = false;
bool requestRechts = false;
int zeit = 1000;
int step = 0;
void setup() {
Serial.begin(9600);
while (!Serial){
; // Warten, bis die serielle Schnittstelle verfügbar ist
}
for (int i = 0; i < 3; i++) {
pinMode(ampelLinks[i], OUTPUT);
pinMode(ampelRechts[i], OUTPUT);
}
for (int i = 0; i < 3; i++) {
digitalWrite(ampelLinks[i], LOW);
digitalWrite(ampelRechts[i], LOW);
}
showMenu();
}
void loop() {
if (Serial.available() > 0) {
int choice = Serial.parseInt();
processChoice(choice);
showMenu(); // Zeige das Menü erneut nach der Verarbeitung der Auswahl
}
switch (step) {
case 0:
Ampel_Links_Red();
Ampel_Rechts_Green();
delay(zeit * 5);
break;
case 1:
Ampel_Links_RedYellow();
Ampel_Rechts_Yellow();
delay(zeit * 1.5);
break;
case 2:
Ampel_Links_Green();
Ampel_Rechts_Red();
delay(zeit * 5);
break;
case 3:
Ampel_Links_Yellow();
Ampel_Rechts_RedYellow();
delay(zeit * 2);
break;
}
step = (step + 1) % 4; // Schritt zurücksetzen nach 4
}
void showMenu(){
Serial.println("Wählen Sie einen Eintrag per Eingabe der Nummer:");
Serial.println("1. Auslesen des Leucht-Zustands einer Ampel");
Serial.println("2. Auslesen des Request Zustands einer Ampel");
Serial.println("3. Setzen des Requests bei einer Ampel");
Serial.print("Auswahl: ");
}
void processChoice(int choice){
switch (choice){
case 1:
readLightState();
break;
case 2:
readRequestState();
break;
case 3:
setRequest();
break;
default:
Serial.println("Ungültige Auswahl!");
break;
}
}
void readLightState() {
Serial.println("Wählen Sie die Ampel (0 = Links, 1 = Rechts): ");
while (Serial.available() == 0){
;//warte auf Eingabe
}
int ampel = Serial.parseInt();
if (ampel == 0) {
Serial.println("Ampel Links Zustand:");
Serial.print("Rot: ");
Serial.println(digitalRead(ampelLinks[0]) == HIGH ? "An" : "Aus");
Serial.print("Gelb: ");
Serial.println(digitalRead(ampelLinks[1]) == HIGH ? "An" : "Aus");
Serial.print("Grün: ");
Serial.println(digitalRead(ampelLinks[2]) == HIGH ? "An" : "Aus");
} else if (ampel == 1) {
Serial.println("Ampel Rechts Zustand:");
Serial.print("Rot: ");
Serial.println(digitalRead(ampelRechts[0]) == HIGH ? "An" : "Aus");
Serial.print("Gelb: ");
Serial.println(digitalRead(ampelRechts[1]) == HIGH ? "An" : "Aus");
Serial.print("Grün: ");
Serial.println(digitalRead(ampelRechts[2]) == HIGH ? "An" : "Aus");
} else {
Serial.println("Ungültige Ampelwahl!");
}
}
void readRequestState() {
Serial.println("Wählen Sie die Apmepl (0 = Links, 1 = Rechts): ");
while (Serial.available() == 0){
;//warte auf Eingabe
}
int ampel = Serial.parseInt();
if (ampel == 0){
Serial.print("Request Zustand Ampel Links: ");
Serial.println(requestLinks ? "An" : "Aus");
} else if (ampel == 1) {
Serial.print("Request Zustand Ampel Rechts: ");
Serial.println(requestRechts ? "An" : "Aus");
} else {
Serial.println("Ungültige Ampelwahl!");
}
}
void setRequest() {
Serial.println("Wählen Sie die Ampel (0 = Links, 1 = Rechts): ");
while (Serial.available() == 0) {
; // Warten auf Eingabe
}
int ampel = Serial.parseInt();
if (ampel == 0) {
requestLinks = !requestLinks;
Serial.print("Request für Ampel Links gesetzt: ");
Serial.println(requestLinks ? "An" : "Aus");
} else if (ampel == 1) {
requestRechts = !requestRechts;
Serial.print("Request für Ampel Rechts gesetzt: ");
Serial.println(requestRechts ? "An" : "Aus");
} else {
Serial.println("Ungültige Ampelwahl!");
}
}
void Ampel_Links_Red() {
Red(ampelLinks[0], true);
Green(ampelLinks[2], false);
Yellow(ampelLinks[1], false);
}
void Ampel_Links_RedYellow() {
Red(ampelLinks[0], true);
RedYellow(ampelLinks[0], ampelLinks[1], true);
}
void Ampel_Links_Green() {
Red(ampelLinks[0], false);
RedYellow(ampelLinks[0], ampelLinks[1], false);
Green(ampelLinks[2], true);
}
void Ampel_Links_Yellow() {
Green(ampelLinks[2], false);
Yellow(ampelLinks[1], true);
}
void Ampel_Rechts_Red() {
Red(ampelRechts[0], true);
Green(ampelRechts[2], false);
Yellow(ampelRechts[1], false);
}
void Ampel_Rechts_RedYellow() {
Red(ampelRechts[0], true);
RedYellow(ampelRechts[0], ampelRechts[1], true);
}
void Ampel_Rechts_Green() {
Red(ampelRechts[0], false);
RedYellow(ampelRechts[0], ampelRechts[1], false);
Green(ampelRechts[2], true);
}
void Ampel_Rechts_Yellow() {
Green(ampelRechts[2], false);
Yellow(ampelRechts[1], true);
}
void Red(int pin, boolean b) {
digitalWrite(pin, b ? HIGH : LOW);
}
void Yellow(int pin, boolean b) {
digitalWrite(pin, b ? HIGH : LOW);
}
void RedYellow(int pin, int pin2, boolean b) {
digitalWrite(pin, b ? HIGH : LOW);
digitalWrite(pin2, b ? HIGH : LOW);
}
void Green(int pin, boolean b) {
digitalWrite(pin, b ? HIGH : LOW);
}