Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define red1Pin 7
- #define yellow1Pin 6
- #define green1Pin 5
- #define red2Pin 4
- #define yellow2Pin 3
- #define green2Pin 2
- #define input1 8
- #define input2 9
- #define input3 10
- #define input4 11
- int state_input1 = 0;
- int state_input2 = 0;
- int state_input3 = 0;
- int state_input4 = 0;
- int trafficLight_1_Car_Count = 0;
- int trafficLight_2_Car_Count = 0;
- unsigned long currentMillis = 0;
- unsigned long previousMillis1 = 0;
- unsigned long previousMillis2 = 0;
- unsigned long previousMillis3 = 0;
- unsigned long previousMillis4 = 0;
- const long interval1 = 2000;
- const long interval2 = 2000;
- const long interval3 = 2000;
- const long interval4 = 2000;
- int i = 0;
- int j = 0;
- enum TrafficLightState {
- RED,
- GREEN,
- YELLOW
- };
- TrafficLightState lightState1 = RED;
- TrafficLightState lightState2 = RED;
- void setup() {
- Serial.begin(9600);
- setupInputsOutputs();
- turnAllLightsRED();
- }
- void loop() {
- readInputs();
- if (trafficLight_1_Car_Count > trafficLight_2_Car_Count) {
- Serial.println("1 [Activated]");
- resetLEDs();
- turnAllLightsRED();
- delay(1000);
- digitalWrite(red1Pin, 0);
- digitalWrite(yellow1Pin, 0);
- digitalWrite(green1Pin, 1);
- delay(5000);
- digitalWrite(green1Pin, 0);
- digitalWrite(yellow1Pin, 1);
- delay(1000);
- turnAllLightsRED();
- }
- if (trafficLight_2_Car_Count > trafficLight_1_Car_Count) {
- Serial.println("2 [Activated]");
- resetLEDs();
- turnAllLightsRED();
- delay(1000);
- digitalWrite(red2Pin, 0);
- digitalWrite(yellow2Pin, 0);
- digitalWrite(green2Pin, 1);
- delay(5000);
- digitalWrite(green2Pin, 0);
- digitalWrite(yellow2Pin, 1);
- delay(1000);
- turnAllLightsRED();
- }
- else {
- Serial.println("Normal Mode");
- controlLights_Normally();
- }
- }//end of LOOP
- void trafficLightControl(int redPin, int yellowPin, int greenPin, TrafficLightState ¤tState, unsigned long &previousMillis, unsigned long currentMillis, long interval) {
- switch (currentState) {
- case RED:
- digitalWrite(redPin, HIGH);
- digitalWrite(yellowPin, LOW);
- digitalWrite(greenPin, LOW);
- if (currentMillis - previousMillis >= interval) {
- currentState = GREEN;
- previousMillis = currentMillis;
- }
- if (j == 1) {
- i = i + 1;
- j = 0;
- }
- if (i == 2)i = 0;
- break;
- case GREEN:
- digitalWrite(redPin, LOW);
- digitalWrite(yellowPin, LOW);
- digitalWrite(greenPin, HIGH);
- if (currentMillis - previousMillis >= interval) {
- currentState = YELLOW;
- previousMillis = currentMillis;
- }
- break;
- case YELLOW:
- digitalWrite(redPin, LOW);
- digitalWrite(yellowPin, HIGH);
- digitalWrite(greenPin, LOW);
- if (currentMillis - previousMillis >= interval) {
- currentState = RED;
- previousMillis = currentMillis;
- }
- j = 1;
- break;
- }
- }
- void turnAllLightsRED() {
- digitalWrite(red1Pin, HIGH);
- digitalWrite(yellow1Pin, LOW);
- digitalWrite(green1Pin, LOW);
- digitalWrite(red2Pin, HIGH);
- digitalWrite(yellow2Pin, LOW);
- digitalWrite(green2Pin, LOW);
- }
- void setupInputsOutputs() {
- pinMode(input1, INPUT);
- pinMode(input2, INPUT);
- pinMode(input3, INPUT);
- pinMode(input4, INPUT);
- pinMode(red1Pin, OUTPUT);
- pinMode(yellow1Pin, OUTPUT);
- pinMode(green1Pin, OUTPUT);
- pinMode(red2Pin, OUTPUT);
- pinMode(yellow2Pin, OUTPUT);
- pinMode(green2Pin, OUTPUT);
- }
- void controlLights_Normally() {
- currentMillis = millis();
- if (i == 0) {
- // Traffic Light 1
- trafficLightControl(red1Pin, yellow1Pin, green1Pin, lightState1, previousMillis1, currentMillis, interval1);
- }
- else if (i == 1) {
- // Traffic Light 2
- trafficLightControl(red2Pin, yellow2Pin, green2Pin, lightState2, previousMillis2, currentMillis, interval2);
- }
- }
- void readInputs() {
- state_input1 = !digitalRead(input1);
- state_input2 = !digitalRead(input2);
- state_input3 = !digitalRead(input3);
- state_input4 = !digitalRead(input4);
- trafficLight_1_Car_Count = state_input1 + state_input2;
- trafficLight_2_Car_Count = state_input3 + state_input4;
- Serial.print(state_input1);
- Serial.print(" ");
- Serial.print(state_input2);
- Serial.print(" ");
- Serial.print(state_input3);
- Serial.print(" ");
- Serial.println(state_input4);
- Serial.print(trafficLight_1_Car_Count);
- Serial.print(" ");
- Serial.println(trafficLight_2_Car_Count);
- }
- void resetLEDs() {
- i = 0;
- j = 0;
- lightState1 = RED;
- lightState2 = RED;
- }
Advertisement
Add Comment
Please, Sign In to add comment