#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 16, 4);
int SchleifeA = 34; //Induktionsschleife Nord vor Ampel
int SchleifeAA = 35; //Induktionsschleife Nord mehrere Fahrzeuge
int SchleifeB = 32; //Induktionsschleife Süd vor Ampel
int SchleifeBB = 33; //Induktionsschleife Süd mehrere Fahrzeuge
int Fussgaengerruf = 4;
int FampelRot = 14;
int FampelGruen = 27;
int AmpelARot = 26;
int AmpelAGelb = 25;
int AmpelAGruen = 13;
int AmpelBRot = 12;
int AmpelBGelb = 15;
int AmpelBGruen = 18;
int Merker = 19;
int Merker2 = 5;
int Merker3 = 2;
int zaehler = 0;
int zaehler2 = 0;
void setup() {
digitalWrite(Merker, LOW);
digitalWrite(Merker2, LOW);
digitalWrite(Merker3, LOW);
digitalWrite(AmpelARot, HIGH);
digitalWrite(AmpelAGelb, LOW);
digitalWrite(AmpelAGruen, LOW);
digitalWrite(AmpelBRot, LOW);
digitalWrite(AmpelBGelb, LOW);
digitalWrite(AmpelBGruen, HIGH);
digitalWrite(FampelRot, HIGH);
LCD.init();
LCD.backlight();
pinMode(SchleifeA, INPUT);
pinMode(SchleifeAA, INPUT);
pinMode(SchleifeB, INPUT);
pinMode(SchleifeBB, INPUT);
pinMode(Fussgaengerruf, INPUT);
pinMode(FampelRot, OUTPUT);
pinMode(FampelGruen, OUTPUT);
pinMode(AmpelARot, OUTPUT);
pinMode(AmpelAGelb, OUTPUT);
pinMode(AmpelAGruen, OUTPUT);
pinMode(AmpelBRot, OUTPUT);
pinMode(AmpelBGelb, OUTPUT);
pinMode(AmpelBGruen, OUTPUT);
pinMode(Merker, OUTPUT);
pinMode(Merker2, OUTPUT);
pinMode(Merker3, OUTPUT);
LCD.setCursor(0, 0);
LCD.print("Betrieb");
LCD.setCursor(0, 2);
LCD.print("lange Phase Sued");
LCD.setCursor(18, 2);
LCD.print(zaehler);
LCD.setCursor(0, 3);
LCD.print("lange Phase Nord");
LCD.setCursor(18, 3);
LCD.print(zaehler2);
}
void loop() {
//Kurze Ampelphase
if ((digitalRead(SchleifeA) == true)
&&(digitalRead(SchleifeAA) == false)
&&(digitalRead(Merker3) == LOW)){
digitalWrite(Merker, HIGH);
}
else if ((digitalRead(SchleifeB) == true)
&&(digitalRead(SchleifeBB) == false)
&&(digitalRead(Merker3) == LOW)){
digitalWrite(Merker, HIGH);
}
if((digitalRead(Merker) == HIGH)
&&(digitalRead(AmpelARot) == HIGH)
&&(digitalRead(AmpelBGruen) == HIGH)){
delay(2000);
digitalWrite(AmpelBGruen, LOW);
digitalWrite(AmpelBGelb, HIGH);
delay(2000);
digitalWrite(AmpelBRot, HIGH);
digitalWrite(AmpelBGelb, LOW);
delay(2000);
digitalWrite(AmpelAGelb, HIGH);
delay(2000);
digitalWrite(AmpelARot, LOW);
digitalWrite(AmpelAGelb, LOW);
digitalWrite(AmpelAGruen, HIGH);
delay(5000);
digitalWrite(AmpelAGruen, LOW);
digitalWrite(AmpelAGelb, HIGH);
delay(2000);
digitalWrite(AmpelARot, HIGH);
digitalWrite(AmpelAGelb, LOW);
delay(2000);
digitalWrite(AmpelBGelb, HIGH);
delay(2000);
digitalWrite(AmpelBRot, LOW);
digitalWrite(AmpelBGelb, LOW);
digitalWrite(AmpelBGruen, HIGH);
digitalWrite(Merker, LOW);
delay(2000);
}
//lange Ampelphase
if((digitalRead(SchleifeAA) == true)
&&(digitalRead(SchleifeA) == true)
&&(digitalRead(Merker3) == LOW)){
digitalWrite(Merker2, HIGH);
zaehler = zaehler +1;
LCD.setCursor(18, 2);
LCD.print(zaehler);
}
else if((digitalRead(SchleifeBB) == true)
&&(digitalRead(SchleifeB) == true)
&&(digitalRead(Merker3) == LOW)){
digitalWrite(Merker2, HIGH);
zaehler2 = zaehler2 +1;
LCD.setCursor(18, 3);
LCD.print(zaehler2);
}
if((digitalRead(Merker2) == HIGH)
&&(digitalRead(AmpelARot) == HIGH)
&&(digitalRead(AmpelBGruen) == HIGH)){
delay(2000);
digitalWrite(AmpelBGruen, LOW);
digitalWrite(AmpelBGelb, HIGH);
delay(2000);
digitalWrite(AmpelBRot, HIGH);
digitalWrite(AmpelBGelb, LOW);
delay(2000);
digitalWrite(AmpelAGelb, HIGH);
delay(2000);
digitalWrite(AmpelARot, LOW);
digitalWrite(AmpelAGelb, LOW);
digitalWrite(AmpelAGruen, HIGH);
delay(10000);
digitalWrite(AmpelAGruen, LOW);
digitalWrite(AmpelAGelb, HIGH);
delay(2000);
digitalWrite(AmpelARot, HIGH);
digitalWrite(AmpelAGelb, LOW);
delay(2000);
digitalWrite(AmpelBGelb, HIGH);
delay(2000);
digitalWrite(AmpelBRot, LOW);
digitalWrite(AmpelBGelb, LOW);
digitalWrite(AmpelBGruen, HIGH);
digitalWrite(Merker2, LOW);
delay(2000);
}
//Fussgaenger Ampelphase
if(digitalRead(Fussgaengerruf) == true){
digitalWrite(Merker3, HIGH);
}
if((digitalRead(Merker3) == HIGH)
&&(digitalRead(Merker2) == LOW)
&&(digitalRead(Merker) == LOW)){
delay(2000);
digitalWrite(AmpelBGruen, LOW);
digitalWrite(AmpelBGelb, HIGH);
delay(2000);
digitalWrite(AmpelBRot, HIGH);
digitalWrite(AmpelBGelb, LOW);
delay(2000);
digitalWrite(FampelRot, LOW);
digitalWrite(FampelGruen, HIGH);
delay(5000);
digitalWrite(FampelGruen, LOW);
digitalWrite(FampelRot, HIGH);
delay(2000);
digitalWrite(AmpelBGelb, HIGH);
delay(2000);
digitalWrite(AmpelBRot, LOW);
digitalWrite(AmpelBGelb, LOW);
digitalWrite(AmpelBGruen, HIGH);
digitalWrite(Merker3, LOW);
}
}