Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Traffic Light final project
- //Written fully by D for Mr. Jenkins
- //Standard=0 Rush Hour=1 Night time=2
- int TRAFFIC_MODE = 2;
- bool TRAFFIC_EMULATE_SIDEWALK = true;
- bool TRAFFIC_ADVANCED_GREEN = true;
- bool TRAFFIC_FLASHING = true;//Flashing red side streets, Flashing yellow main streets.
- //define all of the LED pins, some of them use same pins because arduino has little pins available
- //left right
- int TRAFFIC1_RED = 2;
- int TRAFFIC1_YELLOW = 3;
- int TRAFFIC1_GREEN = 4;
- //top bottom
- int TRAFFIC2_RED = 5;
- int TRAFFIC2_YELLOW = 6;
- int TRAFFIC2_GREEN = 7;
- int PEDLIGHT1 = 8;
- int PEDLIGHT2 = 9;
- int PEDBUTTON1 = 10;
- int PEDBUTTON2 = 11;
- //add this much to traffic timer to allow peds more time
- int TRAFFIC_WAIT_FOR_PED_TIMER = 1500;
- bool PedLight1 = false;
- bool PedLight2 = false;
- //incremenets this as lights are switched to simulate real pedestrians pressing buttons
- int PedLightCycle = 0;
- void setup()
- {
- pinMode(TRAFFIC1_RED, OUTPUT);
- pinMode(TRAFFIC1_YELLOW, OUTPUT);
- pinMode(TRAFFIC1_GREEN, OUTPUT);
- pinMode(TRAFFIC2_RED, OUTPUT);
- pinMode(TRAFFIC2_YELLOW, OUTPUT);
- pinMode(TRAFFIC2_GREEN, OUTPUT);
- pinMode(PEDLIGHT1, OUTPUT);
- pinMode(PEDLIGHT2, OUTPUT);
- //Not using buttons, Jenkins said to make it on a timer
- //pinMode(PEDBUTTON1, INPUT);
- //pinMode(PEDBUTTON2, INPUT);
- }
- void loop()
- {
- //not in setup() because sidewalk changes these and sets back
- int DELAYSPEED = 1000;
- int DELAYSPEEDGREEN = 1500;
- if (TRAFFIC_MODE == 1) // rush hour traffic
- {
- DELAYSPEED = 1000;
- DELAYSPEEDGREEN = 1000;
- }
- else if (TRAFFIC_MODE == 2) // nigtht time traffic
- {
- DELAYSPEED = 1000;
- DELAYSPEEDGREEN = 2250;
- }
- //Strat traffic light logic under.
- digitalWrite(TRAFFIC1_RED, HIGH);
- digitalWrite(TRAFFIC2_RED, HIGH);
- if (TRAFFIC_EMULATE_SIDEWALK)
- {
- PedLightCycle++;
- if (PedLightCycle == 2)
- PedLight1 = true;
- else if (PedLightCycle == 3)
- {
- PedLight2 = true;
- PedLightCycle = 0;
- }
- }
- else
- {
- //Read inputs, cache them for later. nvm, Not using buttons, Jenkins said to make it on a timer
- /*if (digitalRead(PEDBUTTON1) == HIGH)
- PedLight1 = true;
- if (digitalRead(PEDBUTTON2) == HIGH)
- PedLight2 = true;*/
- }
- digitalWrite(TRAFFIC1_RED, LOW);
- if (PedLight1)
- {
- digitalWrite(PEDLIGHT1, HIGH);
- DELAYSPEED = DELAYSPEED + TRAFFIC_WAIT_FOR_PED_TIMER; // allow pedestrians more time to walk during red/yellow
- }
- if (TRAFFIC_ADVANCED_GREEN)
- {
- //assume that each flash is 300ms, with 100ms break in between.
- int numflashes = (DELAYSPEEDGREEN / 400); //example = 2000ms green delay becomes 5 flashes.
- for (int i = 0; i < numflashes; ++i)
- {
- digitalWrite(TRAFFIC1_GREEN, LOW);
- delay(100);
- digitalWrite(TRAFFIC1_GREEN, HIGH);
- delay(300);
- }
- }
- else
- {
- digitalWrite(TRAFFIC1_GREEN, HIGH);
- delay(DELAYSPEEDGREEN);
- }
- digitalWrite(TRAFFIC1_GREEN, LOW);
- if (TRAFFIC_FLASHING) // Main streets first
- {
- //assume that each flash is 300ms, with 100ms break in between.
- int numflashes = (DELAYSPEEDGREEN / 400); //using green delay, so traffic gets time
- for (int i = 0; i < numflashes; ++i)
- {
- digitalWrite(TRAFFIC1_YELLOW, LOW);
- delay(100);
- digitalWrite(TRAFFIC1_YELLOW, HIGH);
- delay(300);
- }
- }
- //allow original yellow code to run, to make cars slow down
- digitalWrite(TRAFFIC1_YELLOW, HIGH);
- delay(DELAYSPEED);
- if (PedLight1)
- {
- digitalWrite(PEDLIGHT1, LOW);
- DELAYSPEED = DELAYSPEED - TRAFFIC_WAIT_FOR_PED_TIMER; // no more ped light. restore
- }
- digitalWrite(TRAFFIC1_YELLOW, LOW);
- if (TRAFFIC_FLASHING) // side streets flash
- {
- //assume that each flash is 300ms, with 100ms break in between.
- int numflashes = (DELAYSPEEDGREEN / 400); //using green delay, so traffic gets time
- for (int i = 0; i < numflashes; ++i)
- {
- digitalWrite(TRAFFIC1_RED, LOW);
- delay(100);
- digitalWrite(TRAFFIC1_RED, HIGH);
- delay(300);
- }
- }
- //allow original red code to run, to make cars slow down
- digitalWrite(TRAFFIC1_RED, HIGH);
- //all traffic stopped for this time
- delay(DELAYSPEED);
- //begin logic for second row of trafic lights here
- digitalWrite(TRAFFIC2_RED, LOW);
- digitalWrite(TRAFFIC2_GREEN, HIGH);
- if (PedLight2)
- {
- digitalWrite(PEDLIGHT2, HIGH);
- DELAYSPEED = DELAYSPEED + TRAFFIC_WAIT_FOR_PED_TIMER; // allow pedestrians more time to walk during red/yellow
- }
- delay(DELAYSPEEDGREEN);
- digitalWrite(TRAFFIC2_GREEN, LOW);
- digitalWrite(TRAFFIC2_YELLOW, HIGH);
- delay(DELAYSPEED);
- if (PedLight2)
- {
- digitalWrite(PEDLIGHT2, LOW);
- DELAYSPEED = DELAYSPEED - TRAFFIC_WAIT_FOR_PED_TIMER; // no more ped light, restore original time
- }
- digitalWrite(TRAFFIC2_YELLOW, LOW);
- digitalWrite(TRAFFIC2_RED, HIGH);
- delay(DELAYSPEED);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement