// coded by Markus Scheurer, last edited 2023-11-22
// todo:
// connecting button green to start traffic
// connecting button yellow to start test mode
// easy the loop codes, trying out lists, if / elase, when and others
// activate the dot matrix display with test mode, at the moment it's starting at the second loop
#include "string.h"
// real time clock copied from https://wokwi.com/projects/305979285237137984 + terms adjusted
// library + definitions rtc
#include "RTClib.h"
RTC_DS1307 rtc;
char daysOfTheWeek[7][12] = {"Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"};
// import configuration for dot matrix displays
#include <MD_Parola.h>
// definitions for dot matrix display pins and size
#define clk_pin 52 // cyan connection arduino to breadboard and displays
#define data_pin 51 // blue connection arduino to breadboard and displays
#define chip_select_pin 53 // purple connection arduino to breadboard and displays
#define max_devices 4 // 4 8x8 displays side by side (one piece)
// definitions for traffic leds1 turn left
#define led_green_1_turn_left 14 // green connection arduino to led
#define led_orange_1_turn_left 2 // orange connection arduino to led
#define led_red_1_turn_left 3 // red connection arduino to led
// definitions for traffic leds1 straight and turn right
#define led_green_1_turn_right 4 // limegreen connection arduino to led
#define led_orange_1_turn_right 5 // yellow connection arduino to led
#define led_red_1_turn_right 6 // magenta connection arduino to led
// definitions for traffic leds2 turn left
#define led_green_2_turn_left 8 // green connection arduino to led
#define led_orange_2_turn_left 9 // orange connection arduino to led
#define led_red_2_turn_left 10 // red connection arduino to led
// definitions for traffic leds2 straight and turn right
#define led_green_2_turn_right 11 // limegreen connection arduino to led
#define led_orange_2_turn_right 12 // yellow connection arduino to led
#define led_red_2_turn_right 13 // magenta connection arduino to led
// definitions for traffic leds3 turn left
#define led_green_3_turn_left 22 // green connection arduino to led
#define led_orange_3_turn_left 23 // orange connection arduino to led
#define led_red_3_turn_left 24 // red connection arduino to led
// definitions for traffic leds3 straight and turn right
#define led_green_3_turn_right 28 // limegreen connection arduino to led
#define led_orange_3_turn_right 29 // yellow connection arduino to led
#define led_red_3_turn_right 30 // magenta connection arduino to led
// definitions for traffic leds4 turn left
#define led_green_4_turn_left 34 // green connection arduino to led
#define led_orange_4_turn_left 35 // orange connection arduino to led
#define led_red_4_turn_left 36 // red connection arduino to led
// definitions for traffic leds4 straight and turn right
#define led_green_4_turn_right 40 // limegreen connection arduino to led
#define led_orange_4_turn_right 41 // yellow connection arduino to led
#define led_red_4_turn_right 42 // magenta connection arduino to led
// definitions for push buttons + test leds
#define btn_test 17 // push button for test mode
#define btn_traffic 16 // push button for traffic live system
#define test_mode_led 18 // limegreen led on when test mode buttons activated
#define traffic_mode_led 19 // yellow led on when traffic mode buttons activated
// bool status for push button test mode
bool condition1test = 1 ; // 0 = low / false, 1 = high / true; https://docs.wokwi.com/parts/wokwi-pushbutton/#:~:text=The%20digital%20pin%20will%20read
bool condition2test = 1 ;
bool condition3test = 1 ;
bool condition4test = 1 ;
bool condition5test = 1 ;
// bool status for push button traffic mode
bool condition1traffic = 1 ; // 0 = low / false, 1 = high / true; https://docs.wokwi.com/parts/wokwi-pushbutton/#:~:text=The%20digital%20pin%20will%20read
bool condition2traffic = 1 ;
bool condition3traffic = 1 ;
bool condition4traffic = 1 ;
bool condition5traffic = 1 ;
// definitions for loops
#define test_loop_1 200
#define test_loop_2 350
#define extra_short_loop 1000
#define short_loop 2000
#define long_loop 5000
// define text lines for printout
#define bl "-----" // break line
#define gor "über orange \u26A1 zu rot \u26D4 wechseln" // green to orange to red
#define rog "über rot-orange \u26D4 \u26A1 zu grün \u2705 wechseln" // red to orange to green
#define td "oben / unten \u21C5\n" // print top / down
#define rl "rechts / links \u21C6\n" // print right / left
#define rla "rechte Spur | |\u21EC| " // right lane
#define lla "linke Spur |\u21EC| | " // left lane
#define tur "darf geradeaus + rechts fahren \u2705 \u2191 \u21B1" // allowed to turn left
#define tul "darf links fahren \u2705 \u21B0" // allowed to turn left
#define ms "muss anhalten \u26D4" // must stop
#define tm "Test-Modus: " // test mode
// define list array for led color + direction
// int i = 0;
// string col[] = {green, orange, red}; // color
// string dir[] = {turn_left, turn_right}; // direction
// int8_t pos[] = {1, 2, 3, 4}; // position 1 = top, 2 = left, 3 = down, 4 = right
// settings for the dot matrix display
MD_Parola matrix = MD_Parola(MD_MAX72XX::PAROLA_HW, chip_select_pin, max_devices); // code help by Kay Schmied
void setup() {
// condition push button
pinMode(btn_test, INPUT_PULLUP); //INPUT_PULLUP = activate electric resistance
pinMode(btn_traffic, INPUT_PULLUP); //INPUT_PULLUP = activate electric resistance
// configuration traffic lights 1 right side
pinMode(led_green_1_turn_left, OUTPUT);
pinMode(led_orange_1_turn_left, OUTPUT);
pinMode(led_red_1_turn_left, OUTPUT);
pinMode(led_green_1_turn_right, OUTPUT);
pinMode(led_orange_1_turn_right, OUTPUT);
pinMode(led_red_1_turn_right, OUTPUT);
// configuration traffic lights 2 right side
pinMode(led_green_2_turn_left, OUTPUT);
pinMode(led_orange_2_turn_left, OUTPUT);
pinMode(led_red_2_turn_left, OUTPUT);
pinMode(led_green_2_turn_right, OUTPUT);
pinMode(led_orange_2_turn_right, OUTPUT);
pinMode(led_red_2_turn_right, OUTPUT);
// configuration traffic lights 3 right side
pinMode(led_green_3_turn_left, OUTPUT);
pinMode(led_orange_3_turn_left, OUTPUT);
pinMode(led_red_3_turn_left, OUTPUT);
pinMode(led_green_3_turn_right, OUTPUT);
pinMode(led_orange_3_turn_right, OUTPUT);
pinMode(led_red_3_turn_right, OUTPUT);
// configuration traffic lights 4 right side
pinMode(led_green_4_turn_left, OUTPUT);
pinMode(led_orange_4_turn_left, OUTPUT);
pinMode(led_red_4_turn_left, OUTPUT);
pinMode(led_green_4_turn_right, OUTPUT);
pinMode(led_orange_4_turn_right, OUTPUT);
pinMode(led_red_4_turn_right, OUTPUT);
condition1test = digitalRead(btn_test);
condition1traffic = digitalRead(btn_traffic);
// checking if test_mode_button is activated
if (condition1test == LOW){
// activate test_mode_led
digitalWrite(test_mode_led, HIGH);
delay(short_loop);
}
else {// turn off test_mode_led
digitalWrite(test_mode_led, LOW);
delay(10);
}
// real time clock
Serial.begin(115200);
if (! rtc.begin()) {
Serial.println("Kann RTC nicht ermitteln");
Serial.flush();
abort();
}
// setup for the dot matrix display
//Serial.begin(9600);
matrix.begin();
matrix.displayClear();
// logging date + time
DateTime now = rtc.now();
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(", ");
Serial.print(now.day(), DEC);
Serial.print(".");
Serial.print(now.month(), DEC);
Serial.print(".");
Serial.print(now.year(), DEC);
Serial.print(" um ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.println(now.second(), DEC);
delay(10);
// test mode for checking all leds simoultanously on
Serial.print(tm);
Serial.println("3x blinken");
//Serial.println("-----");
Serial.println(bl);
digitalWrite(led_green_1_turn_left, HIGH);
digitalWrite(led_orange_1_turn_left, HIGH);
digitalWrite(led_red_1_turn_left, HIGH);
digitalWrite(led_green_1_turn_right, HIGH);
digitalWrite(led_orange_1_turn_right, HIGH);
digitalWrite(led_red_1_turn_right, HIGH);
digitalWrite(led_green_2_turn_left, HIGH);
digitalWrite(led_orange_2_turn_left, HIGH);
digitalWrite(led_red_2_turn_left, HIGH);
digitalWrite(led_green_2_turn_right, HIGH);
digitalWrite(led_orange_2_turn_right, HIGH);
digitalWrite(led_red_2_turn_right, HIGH);
digitalWrite(led_green_3_turn_left, HIGH);
digitalWrite(led_orange_3_turn_left, HIGH);
digitalWrite(led_red_3_turn_left, HIGH);
digitalWrite(led_green_3_turn_right, HIGH);
digitalWrite(led_orange_3_turn_right, HIGH);
digitalWrite(led_red_3_turn_right, HIGH);
digitalWrite(led_green_4_turn_left, HIGH);
digitalWrite(led_orange_4_turn_left, HIGH);
digitalWrite(led_red_4_turn_left, HIGH);
digitalWrite(led_green_4_turn_right, HIGH);
digitalWrite(led_orange_4_turn_right, HIGH);
digitalWrite(led_red_4_turn_right, HIGH);
delay(test_loop_2);
// test mode for checking all leds simoultanously off
digitalWrite(led_green_1_turn_left, LOW);
digitalWrite(led_orange_1_turn_left, LOW);
digitalWrite(led_red_1_turn_left, LOW);
digitalWrite(led_green_1_turn_right, LOW);
digitalWrite(led_orange_1_turn_right, LOW);
digitalWrite(led_red_1_turn_right, LOW);
digitalWrite(led_green_2_turn_left, LOW);
digitalWrite(led_orange_2_turn_left, LOW);
digitalWrite(led_red_2_turn_left, LOW);
digitalWrite(led_green_2_turn_right, LOW);
digitalWrite(led_orange_2_turn_right, LOW);
digitalWrite(led_red_2_turn_right, LOW);
digitalWrite(led_green_3_turn_left, LOW);
digitalWrite(led_orange_3_turn_left, LOW);
digitalWrite(led_red_3_turn_left, LOW);
digitalWrite(led_green_3_turn_right, LOW);
digitalWrite(led_orange_3_turn_right, LOW);
digitalWrite(led_red_3_turn_right, LOW);
digitalWrite(led_green_4_turn_left, LOW);
digitalWrite(led_orange_4_turn_left, LOW);
digitalWrite(led_red_4_turn_left, LOW);
digitalWrite(led_green_4_turn_right, LOW);
digitalWrite(led_orange_4_turn_right, LOW);
digitalWrite(led_red_4_turn_right, LOW);
delay(test_loop_2);
// test mode for checking all leds simoultanously on
digitalWrite(led_green_1_turn_left, HIGH);
digitalWrite(led_orange_1_turn_left, HIGH);
digitalWrite(led_red_1_turn_left, HIGH);
digitalWrite(led_green_1_turn_right, HIGH);
digitalWrite(led_orange_1_turn_right, HIGH);
digitalWrite(led_red_1_turn_right, HIGH);
digitalWrite(led_green_2_turn_left, HIGH);
digitalWrite(led_orange_2_turn_left, HIGH);
digitalWrite(led_red_2_turn_left, HIGH);
digitalWrite(led_green_2_turn_right, HIGH);
digitalWrite(led_orange_2_turn_right, HIGH);
digitalWrite(led_red_2_turn_right, HIGH);
digitalWrite(led_green_3_turn_left, HIGH);
digitalWrite(led_orange_3_turn_left, HIGH);
digitalWrite(led_red_3_turn_left, HIGH);
digitalWrite(led_green_3_turn_right, HIGH);
digitalWrite(led_orange_3_turn_right, HIGH);
digitalWrite(led_red_3_turn_right, HIGH);
digitalWrite(led_green_4_turn_left, HIGH);
digitalWrite(led_orange_4_turn_left, HIGH);
digitalWrite(led_red_4_turn_left, HIGH);
digitalWrite(led_green_4_turn_right, HIGH);
digitalWrite(led_orange_4_turn_right, HIGH);
digitalWrite(led_red_4_turn_right, HIGH);
delay(test_loop_2);
// test mode for checking all leds simoultanously off
digitalWrite(led_green_1_turn_left, LOW);
digitalWrite(led_orange_1_turn_left, LOW);
digitalWrite(led_red_1_turn_left, LOW);
digitalWrite(led_green_1_turn_right, LOW);
digitalWrite(led_orange_1_turn_right, LOW);
digitalWrite(led_red_1_turn_right, LOW);
digitalWrite(led_green_2_turn_left, LOW);
digitalWrite(led_orange_2_turn_left, LOW);
digitalWrite(led_red_2_turn_left, LOW);
digitalWrite(led_green_2_turn_right, LOW);
digitalWrite(led_orange_2_turn_right, LOW);
digitalWrite(led_red_2_turn_right, LOW);
digitalWrite(led_green_3_turn_left, LOW);
digitalWrite(led_orange_3_turn_left, LOW);
digitalWrite(led_red_3_turn_left, LOW);
digitalWrite(led_green_3_turn_right, LOW);
digitalWrite(led_orange_3_turn_right, LOW);
digitalWrite(led_red_3_turn_right, LOW);
digitalWrite(led_green_4_turn_left, LOW);
digitalWrite(led_orange_4_turn_left, LOW);
digitalWrite(led_red_4_turn_left, LOW);
digitalWrite(led_green_4_turn_right, LOW);
digitalWrite(led_orange_4_turn_right, LOW);
digitalWrite(led_red_4_turn_right, LOW);
delay(test_loop_2);
// test mode for checking all leds simoultanously on
digitalWrite(led_green_1_turn_left, HIGH);
digitalWrite(led_orange_1_turn_left, HIGH);
digitalWrite(led_red_1_turn_left, HIGH);
digitalWrite(led_green_1_turn_right, HIGH);
digitalWrite(led_orange_1_turn_right, HIGH);
digitalWrite(led_red_1_turn_right, HIGH);
digitalWrite(led_green_2_turn_left, HIGH);
digitalWrite(led_orange_2_turn_left, HIGH);
digitalWrite(led_red_2_turn_left, HIGH);
digitalWrite(led_green_2_turn_right, HIGH);
digitalWrite(led_orange_2_turn_right, HIGH);
digitalWrite(led_red_2_turn_right, HIGH);
digitalWrite(led_green_3_turn_left, HIGH);
digitalWrite(led_orange_3_turn_left, HIGH);
digitalWrite(led_red_3_turn_left, HIGH);
digitalWrite(led_green_3_turn_right, HIGH);
digitalWrite(led_orange_3_turn_right, HIGH);
digitalWrite(led_red_3_turn_right, HIGH);
digitalWrite(led_green_4_turn_left, HIGH);
digitalWrite(led_orange_4_turn_left, HIGH);
digitalWrite(led_red_4_turn_left, HIGH);
digitalWrite(led_green_4_turn_right, HIGH);
digitalWrite(led_orange_4_turn_right, HIGH);
digitalWrite(led_red_4_turn_right, HIGH);
delay(test_loop_2);
// test mode for checking all leds simoultanously off
digitalWrite(led_green_1_turn_left, LOW);
digitalWrite(led_orange_1_turn_left, LOW);
digitalWrite(led_red_1_turn_left, LOW);
digitalWrite(led_green_1_turn_right, LOW);
digitalWrite(led_orange_1_turn_right, LOW);
digitalWrite(led_red_1_turn_right, LOW);
digitalWrite(led_green_2_turn_left, LOW);
digitalWrite(led_orange_2_turn_left, LOW);
digitalWrite(led_red_2_turn_left, LOW);
digitalWrite(led_green_2_turn_right, LOW);
digitalWrite(led_orange_2_turn_right, LOW);
digitalWrite(led_red_2_turn_right, LOW);
digitalWrite(led_green_3_turn_left, LOW);
digitalWrite(led_orange_3_turn_left, LOW);
digitalWrite(led_red_3_turn_left, LOW);
digitalWrite(led_green_3_turn_right, LOW);
digitalWrite(led_orange_3_turn_right, LOW);
digitalWrite(led_red_3_turn_right, LOW);
digitalWrite(led_green_4_turn_left, LOW);
digitalWrite(led_orange_4_turn_left, LOW);
digitalWrite(led_red_4_turn_left, LOW);
digitalWrite(led_green_4_turn_right, LOW);
digitalWrite(led_orange_4_turn_right, LOW);
digitalWrite(led_red_4_turn_right, LOW);
delay(test_loop_2);
// test mode for checking the leds 1 in row
// logging date + time
// DateTime now = rtc.now();
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(", ");
Serial.print(now.day(), DEC);
Serial.print(".");
Serial.print(now.month(), DEC);
Serial.print(".");
Serial.print(now.year(), DEC);
Serial.print(" um ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.println(now.second(), DEC);
delay(10);
Serial.print(tm);
Serial.println("LEDs grün \u2705 / orange \u26A1 / rot \u26D4 in Reihe");
Serial.println(bl);
digitalWrite(led_green_1_turn_left, HIGH);
delay(600);
digitalWrite(led_green_1_turn_left, LOW);
delay(test_loop_1);
digitalWrite(led_orange_1_turn_left, HIGH);
delay(test_loop_1);
digitalWrite(led_orange_1_turn_left, LOW);
delay(test_loop_1);
digitalWrite(led_red_1_turn_left, HIGH);
delay(test_loop_1);
digitalWrite(led_red_1_turn_left, LOW);
delay(test_loop_1);
digitalWrite(led_green_1_turn_right, HIGH);
delay(test_loop_1);
digitalWrite(led_green_1_turn_right, LOW);
delay(test_loop_1);
digitalWrite(led_orange_1_turn_right, HIGH);
delay(test_loop_1);
digitalWrite(led_orange_1_turn_right, LOW);
delay(test_loop_1);
digitalWrite(led_red_1_turn_right, HIGH);
delay(test_loop_1);
digitalWrite(led_red_1_turn_right, LOW);
delay(test_loop_1);
// test mode for checking the leds 2 in row
digitalWrite(led_green_2_turn_left, HIGH);
delay(test_loop_1);
digitalWrite(led_green_2_turn_left, LOW);
delay(test_loop_1);
digitalWrite(led_orange_2_turn_left, HIGH);
delay(test_loop_1);
digitalWrite(led_orange_2_turn_left, LOW);
delay(test_loop_1);
digitalWrite(led_red_2_turn_left, HIGH);
delay(test_loop_1);
digitalWrite(led_red_2_turn_left, LOW);
delay(test_loop_1);
digitalWrite(led_green_2_turn_right, HIGH);
delay(test_loop_1);
digitalWrite(led_green_2_turn_right, LOW);
delay(test_loop_1);
digitalWrite(led_orange_2_turn_right, HIGH);
delay(test_loop_1);
digitalWrite(led_orange_2_turn_right, LOW);
delay(test_loop_1);
digitalWrite(led_red_2_turn_right, HIGH);
delay(test_loop_1);
digitalWrite(led_red_2_turn_right, LOW);
delay(test_loop_1);
// test mode for checking the leds 3 in row
digitalWrite(led_green_3_turn_left, HIGH);
delay(test_loop_1);
digitalWrite(led_green_3_turn_left, LOW);
delay(test_loop_1);
digitalWrite(led_orange_3_turn_left, HIGH);
delay(test_loop_1);
digitalWrite(led_orange_3_turn_left, LOW);
delay(test_loop_1);
digitalWrite(led_red_3_turn_left, HIGH);
delay(test_loop_1);
digitalWrite(led_red_3_turn_left, LOW);
delay(test_loop_1);
digitalWrite(led_green_3_turn_right, HIGH);
delay(test_loop_1);
digitalWrite(led_green_3_turn_right, LOW);
delay(test_loop_1);
digitalWrite(led_orange_3_turn_right, HIGH);
delay(test_loop_1);
digitalWrite(led_orange_3_turn_right, LOW);
delay(test_loop_1);
digitalWrite(led_red_3_turn_right, HIGH);
delay(test_loop_1);
digitalWrite(led_red_3_turn_right, LOW);
delay(test_loop_1);
// test mode for checking the leds 4 in row
digitalWrite(led_green_4_turn_left, HIGH);
delay(test_loop_1);
digitalWrite(led_green_4_turn_left, LOW);
delay(test_loop_1);
digitalWrite(led_orange_4_turn_left, HIGH);
delay(test_loop_1);
digitalWrite(led_orange_4_turn_left, LOW);
delay(test_loop_1);
digitalWrite(led_red_4_turn_left, HIGH);
delay(test_loop_1);
digitalWrite(led_red_4_turn_left, LOW);
delay(test_loop_1);
digitalWrite(led_green_4_turn_right, HIGH);
delay(test_loop_1);
digitalWrite(led_green_4_turn_right, LOW);
delay(test_loop_1);
digitalWrite(led_orange_4_turn_right, HIGH);
delay(test_loop_1);
digitalWrite(led_orange_4_turn_right, LOW);
delay(test_loop_1);
digitalWrite(led_red_4_turn_right, HIGH);
delay(test_loop_1);
digitalWrite(led_red_4_turn_right, LOW);
delay(test_loop_1);
// logging date + time
// DateTime now = rtc.now();
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(", ");
Serial.print(now.day(), DEC);
Serial.print(".");
Serial.print(now.month(), DEC);
Serial.print(".");
Serial.print(now.year(), DEC);
Serial.print(" um ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.println(now.second(), DEC);
delay(10);
// activate traffics lights in safety mode
Serial.println("Aktivierungsphase: alle Ampeln rot \u26D4");
Serial.println(bl);
digitalWrite(led_red_1_turn_left, HIGH);
digitalWrite(led_red_1_turn_right, HIGH);
digitalWrite(led_red_2_turn_left, HIGH);
digitalWrite(led_red_2_turn_right, HIGH);
digitalWrite(led_red_3_turn_left, HIGH);
digitalWrite(led_red_3_turn_right, HIGH);
digitalWrite(led_red_4_turn_left, HIGH);
digitalWrite(led_red_4_turn_right, HIGH);
delay(short_loop);
}
void loop() {
// loop for the dot matrix display, just text, no effects
if(matrix.displayAnimate()){
matrix.displayText("<-| ->", PA_CENTER, 20, 200, PA_NO_EFFECT);
}
// sections 1 = top, 2 = left, 3 = down, 4 = right
// logging date + time
DateTime now = rtc.now();
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(", ");
Serial.print(now.day(), DEC);
Serial.print(".");
Serial.print(now.month(), DEC);
Serial.print(".");
Serial.print(now.year(), DEC);
Serial.print(" um ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.println(now.second(), DEC);
delay(10);
Serial.println("Verkehr aktiv - 4 Phasen");
Serial.println(bl);
delay(short_loop);
// change car traffic light top / down - for right turn - from red to red-orange to green - Print
Serial.print(td);
Serial.print(rla);
Serial.println(tur);
Serial.println(rog);
Serial.println(bl);
// change car traffic light top / down - for right turn - from red to red-orange to green
digitalWrite(led_orange_1_turn_right, HIGH);
digitalWrite(led_orange_3_turn_right, HIGH);
delay(extra_short_loop);
digitalWrite(led_red_1_turn_right, LOW);
digitalWrite(led_red_3_turn_right, LOW);
digitalWrite(led_orange_1_turn_right, LOW);
digitalWrite(led_orange_3_turn_right, LOW);
digitalWrite(led_green_1_turn_right, HIGH);
digitalWrite(led_green_3_turn_right, HIGH);
delay(long_loop);
// change car traffic light top / down - for right turn - from green to orange to red
Serial.print(td);
Serial.print(rla);
Serial.println(ms);
Serial.println(gor);
Serial.println(bl);
digitalWrite(led_green_1_turn_right, LOW);
digitalWrite(led_green_3_turn_right, LOW);
digitalWrite(led_orange_1_turn_right, HIGH);
digitalWrite(led_orange_3_turn_right, HIGH);
delay(short_loop);
digitalWrite(led_orange_1_turn_right, LOW);
digitalWrite(led_orange_3_turn_right, LOW);
digitalWrite(led_red_1_turn_right, HIGH);
digitalWrite(led_red_3_turn_right, HIGH);
delay(long_loop);
// change car traffic light left / right - for right turn - from red to red-orange to green
Serial.print(rl);
Serial.print(rla);
Serial.println(tur);
Serial.println(rog);
Serial.println(bl);
digitalWrite(led_orange_2_turn_right, HIGH);
digitalWrite(led_orange_4_turn_right, HIGH);
delay(extra_short_loop);
digitalWrite(led_red_2_turn_right, LOW);
digitalWrite(led_red_4_turn_right, LOW);
digitalWrite(led_orange_2_turn_right, LOW);
digitalWrite(led_orange_4_turn_right, LOW);
digitalWrite(led_green_2_turn_right, HIGH);
digitalWrite(led_green_4_turn_right, HIGH);
delay(long_loop);
// change car traffic light left / right - for right turn - from green to orange to red
Serial.print(rl);
Serial.print(rla);
Serial.println(ms);
Serial.println(gor);
Serial.println(bl);
digitalWrite(led_green_2_turn_right, LOW);
digitalWrite(led_green_4_turn_right, LOW);
digitalWrite(led_orange_2_turn_right, HIGH);
digitalWrite(led_orange_4_turn_right, HIGH);
delay(short_loop);
digitalWrite(led_orange_2_turn_right, LOW);
digitalWrite(led_orange_4_turn_right, LOW);
digitalWrite(led_red_2_turn_right, HIGH);
digitalWrite(led_red_4_turn_right, HIGH);
delay(long_loop);
// change car traffic light top / down - for left turn - from red to red-orange to green
Serial.print(td);
Serial.print(lla);
Serial.println(tul);
Serial.println(rog);
Serial.println(bl);
digitalWrite(led_orange_1_turn_left, HIGH);
digitalWrite(led_orange_3_turn_left, HIGH);
delay(extra_short_loop);
digitalWrite(led_red_1_turn_left, LOW);
digitalWrite(led_red_3_turn_left, LOW);
digitalWrite(led_orange_1_turn_left, LOW);
digitalWrite(led_orange_3_turn_left, LOW);
digitalWrite(led_green_1_turn_left, HIGH);
digitalWrite(led_green_3_turn_left, HIGH);
delay(long_loop);
// change car traffic light top / down - for left turn - from green to orange to red
Serial.print(td);
Serial.print(lla);
Serial.println(ms);
Serial.println(gor);
Serial.println(bl);
digitalWrite(led_green_1_turn_left, LOW);
digitalWrite(led_green_3_turn_left, LOW);
digitalWrite(led_orange_1_turn_left, HIGH);
digitalWrite(led_orange_3_turn_left, HIGH);
delay(short_loop);
digitalWrite(led_orange_1_turn_left, LOW);
digitalWrite(led_orange_3_turn_left, LOW);
digitalWrite(led_red_1_turn_left, HIGH);
digitalWrite(led_red_3_turn_left, HIGH);
delay(long_loop);
// change car traffic light left / right - for left turn - from red to red-orange to green
Serial.print(rl);
Serial.print(lla);
Serial.println(tul);
Serial.println(rog);
Serial.println(bl);
digitalWrite(led_orange_2_turn_left, HIGH);
digitalWrite(led_orange_4_turn_left, HIGH);
delay(extra_short_loop);
digitalWrite(led_red_2_turn_left, LOW);
digitalWrite(led_red_4_turn_left, LOW);
digitalWrite(led_orange_2_turn_left, LOW);
digitalWrite(led_orange_4_turn_left, LOW);
digitalWrite(led_green_2_turn_left, HIGH);
digitalWrite(led_green_4_turn_left, HIGH);
delay(long_loop);
// change car traffic light left / right - for left turn - from green to orange to red
Serial.print(rl);
Serial.print(lla);
Serial.println(ms);
Serial.println(gor);
Serial.println(bl);
digitalWrite(led_green_2_turn_left, LOW);
digitalWrite(led_green_4_turn_left, LOW);
digitalWrite(led_orange_2_turn_left, HIGH);
digitalWrite(led_orange_4_turn_left, HIGH);
delay(short_loop);
digitalWrite(led_orange_2_turn_left, LOW);
digitalWrite(led_orange_4_turn_left, LOW);
digitalWrite(led_red_2_turn_left, HIGH);
digitalWrite(led_red_4_turn_left, HIGH);
delay(long_loop);
}