/*Programm to control a trafic light
Autor: Scheibl Lukas
Date: 22.04.24
*/
//variables with t are for the trafic light
//variables with p are for the pedestrial light
//colors of the trafic lights
int colort = 0;
int colorp = 0;
//pins trafic light
#define PINGT 10
#define PINYT 9
#define PINRT 8
//pins pedestrial light
#define PINGP 12
#define PINRP 11
//pin pedestrian button
#define PININ 13
//colors
#define OFF 0
#define RED 1
#define YELLOW 2
#define GREEN 3
#define GREENBLINK 4
#define YELLOWBLINK 5
//blink variables
#define myTimeout 1000
long myTimerp = 0;
long myTimert = 0;
int ledStategp = LOW;
int ledStategt = LOW;
int ledStateyt = LOW;
bool buttonState = 0;
void setup() {
//input
pinMode(PININ, INPUT_PULLUP);
//output
pinMode(PINGT, OUTPUT);
pinMode(PINYT, OUTPUT);
pinMode(PINRT, OUTPUT);
pinMode(PINGP, OUTPUT);
pinMode(PINRP, OUTPUT);
Serial.begin(9600);
}
void loop() {
controlButton();
setTraficlight(GREENBLINK);
ctrlTraficlight();
setPedestrianlight(GREENBLINK);
ctrlPedestrianlight();
}
int getButtonstate(){
return buttonState;
}
void resetButtonstate(){//sets Buttonstate LOW
buttonState = LOW;
}
void controlButton(){//sets Buttonstate HIGH
bool button = 0;
button = readButton();
if (button == HIGH){
buttonState = HIGH;
}
}
int readButton(){//returns Buttonstate
bool buttonstate;
buttonstate = !digitalRead(PININ);
return buttonstate;
}
void setPedestrianlight(int color){
colorp = color;
}
void setTraficlight(int color){
colort = color;
}
void ctrlTraficlight(){//controls Traficlight
if(colort == GREENBLINK){
//blink
if (millis() > myTimeout + myTimert ) {
myTimert = millis();
if(ledStategt==LOW) ledStategt = HIGH;
else ledStategt = LOW;
}
if(ledStategt == HIGH) colort = GREEN;
else colort = OFF;
}
if(colort == YELLOWBLINK){
//blink
if (millis() > myTimeout + myTimert ) {
myTimert = millis();
if(ledStategt==LOW) ledStategt = HIGH;
else ledStategt = LOW;
}
if(ledStategt == HIGH) colort = YELLOW;
else colort = OFF;
}
setTraficlightcolor();
}
void ctrlPedestrianlight(){//controls Pedestrianlight
if(colorp == GREENBLINK){
//blink
if (millis() > myTimeout + myTimerp ) {
myTimerp = millis();
if(ledStategp==LOW) ledStategp = HIGH;
else ledStategp = LOW;
}
if(ledStategp == HIGH) colorp = GREEN;
else colorp = OFF;
}
setPedestrianlightcolor();
}
void setTraficlightcolor(){ //Output Traficlight
if(colort == OFF){
digitalWrite(PINGT, LOW);
digitalWrite(PINYT, LOW);
digitalWrite(PINRT, LOW);
}
else if(colort == RED){
digitalWrite(PINGT, LOW);
digitalWrite(PINYT, LOW);
digitalWrite(PINRT, HIGH);
}
else if(colort == YELLOW){
digitalWrite(PINGT, LOW);
digitalWrite(PINYT, HIGH);
digitalWrite(PINRT, LOW);
}
else if(colort == GREEN){
digitalWrite(PINGT, HIGH);
digitalWrite(PINYT, LOW);
digitalWrite(PINRT, LOW);
}
else{
digitalWrite(PINGT, LOW);
digitalWrite(PINYT, LOW);
digitalWrite(PINRT, LOW);
Serial.print(colort);
Serial.println("EROR Traficlight");
}
}
void setPedestrianlightcolor(){//Output Pedestrianlight
if(colorp == OFF){
digitalWrite(PINGP, LOW);
digitalWrite(PINRP, LOW);
}
else if(colorp == RED){
digitalWrite(PINGP, LOW);
digitalWrite(PINRP, HIGH);
}
else if(colorp == GREEN){
digitalWrite(PINGP, HIGH);
digitalWrite(PINRP, LOW);
}
else{
digitalWrite(PINGP, LOW);
digitalWrite(PINRP, LOW);
Serial.print(colorp);
Serial.println("ERROR Pedestrianlight");
}
}