/*********************************************************
Name: Alexander Mandl
Datum: 11.04.2024
Übung: Ampeln im Straßenverkehr
Erstellen Sie ein Programm für eine Kreuzung mit 4 Ampeln
Wenn der Arduino eingeschalten wird, blinken alle Ampeln gelb
Über den Taster werden die Ampeln aktiviert
**************************************************************/
#define RED1 13
#define RED2 12
#define GREEN1 11
#define GREEN2 10
#define BLUE1 9
#define BLUE2 8
#define Taster 7
int status=0;
int b1=0;
int b2=0;
int zaehler=0;
void setup()
{
Serial.begin(9600);
Serial.println("Ampel im Straßenverkehr");
//Pinbelegung der Farben und des Tasters
pinMode(RED1, OUTPUT);
pinMode(GREEN1, OUTPUT);
pinMode(BLUE1, OUTPUT);
pinMode(RED2, OUTPUT);
pinMode(GREEN2, OUTPUT);
pinMode(BLUE2, OUTPUT);
pinMode(Taster,INPUT);
}
void loop()
{
switch(status)
{
case 2: //Startphase alle Ampeln Rot
Serial.println("Status 2");
digitalWrite(RED1,HIGH); //Linie 1 Rot
digitalWrite(GREEN1,LOW);
digitalWrite(BLUE1,LOW);
digitalWrite(RED2,HIGH); //Linie 2 Rot
digitalWrite(GREEN2,LOW);
digitalWrite(BLUE2,LOW);
delay(3000);
status++;
break;
case 3: //Startphase Linie 1 Gelb, Linie 2 Rot
Serial.println("Status 3");
digitalWrite(RED1,HIGH); //Linie 1 Gelb
digitalWrite(GREEN1,HIGH);
digitalWrite(BLUE1,LOW);
digitalWrite(RED2,HIGH); //Linie 2 Rot
digitalWrite(GREEN2,LOW);
digitalWrite(BLUE2,LOW);
delay(3000);
status++;
break;
case 4: //Betriebsphase Linie 1 Grün, Linie 2 Rot
Serial.println("Status 4");
digitalWrite(RED1,LOW); //Linie 1 Grün
digitalWrite(GREEN1,HIGH);
digitalWrite(BLUE1,LOW);
digitalWrite(RED2,HIGH); //Linie 2 Rot
digitalWrite(GREEN2,LOW);
digitalWrite(BLUE2,LOW);
delay(3000);
status++;
break;
case 5: //Betriebsphase Linie 1 Grün blinken, Linie 2 Rot
Serial.println("Status 5");
digitalWrite(RED2,HIGH); //Linie 2 Rot
digitalWrite(GREEN2,LOW);
digitalWrite(BLUE2,LOW);
while(b1 <= 3) //Linie 1 Grün blinken
{
digitalWrite(RED1,LOW);
digitalWrite(GREEN1,LOW);
digitalWrite(BLUE1,LOW);
delay (500);
digitalWrite(RED1,LOW);
digitalWrite(GREEN1,HIGH);
digitalWrite(BLUE1,LOW);
delay (500);
b1 ++;
}
status++;
break;
case 6: //Betriebsphase Linie 1 Gelb, Linie 2 Gelb
Serial.println("Status 6");
digitalWrite(RED1,HIGH); //Linie 1 Gelb
digitalWrite(GREEN1,HIGH);
digitalWrite(BLUE1,LOW);
digitalWrite(RED2,HIGH); //Linie 2 Gelb
digitalWrite(GREEN2,HIGH);
digitalWrite(BLUE2,LOW);
delay(3000);
status++;
break;
case 7: //Betriebsphase Linie 1 Rot, Linie 2 Grün
Serial.println("Status 7");
digitalWrite(RED1,HIGH); //Linie 1 Rot
digitalWrite(GREEN1,LOW);
digitalWrite(BLUE1,LOW);
digitalWrite(RED2,LOW); //Linie 2 Grün
digitalWrite(GREEN2,HIGH);
digitalWrite(BLUE2,LOW);
delay(3000);
status++;
break;
case 8: //Betriebsphase Linie 1 Rot, Linie 2 Grün blinken
Serial.println("Status 8");
digitalWrite(RED1,HIGH); //Linie 1 Rot
digitalWrite(GREEN1,LOW);
digitalWrite(BLUE1,LOW);
while(b2 <= 3) //Linie 2 Grün blinken
{
digitalWrite(RED2,LOW);
digitalWrite(GREEN2,HIGH);
digitalWrite(BLUE2,LOW);
delay (500);
digitalWrite(RED2,LOW);
digitalWrite(GREEN2,LOW);
digitalWrite(BLUE2,LOW);
delay (500);
b2 ++;
}
status++;
break;
case 9: //Betriebsphase Linie 1 Gelb, Linie 2 Gelb
Serial.println("Status 9");
digitalWrite(RED1,HIGH); //Linie 1 Gelb
digitalWrite(GREEN1,HIGH);
digitalWrite(BLUE1,LOW);
digitalWrite(RED2,HIGH); //Linie 2 Gelb
digitalWrite(GREEN2,HIGH);
digitalWrite(BLUE2,LOW);
delay(3000);
status = 4; //Sprung zu ersten Betriebsphase (case 4)
break;
default: //Ruhephase Alle Ampeln blincken Gelb
{
Serial.println("Status 1");
if(digitalRead(Taster) == HIGH) //Abfrage des Tasters
{
status = 2;
}
else
{ //Line 1 und Linie 2 blinken Gelb
digitalWrite(RED1,HIGH);
digitalWrite(GREEN1,HIGH);
digitalWrite(BLUE1,LOW);
digitalWrite(RED2,HIGH);
digitalWrite(GREEN2,HIGH);
digitalWrite(BLUE2,LOW);
delay (500);
digitalWrite(RED1,LOW);
digitalWrite(GREEN1,LOW);
digitalWrite(BLUE1,LOW);
digitalWrite(RED2,LOW);
digitalWrite(GREEN2,LOW);
digitalWrite(BLUE2,LOW);
delay (500);
}
}
}
}