Advertisement
Guest User

Traffic light project arduino jenkins engineering

a guest
Feb 20th, 2020
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.98 KB | None | 0 0
  1. //Traffic Light final project
  2. //Written fully by D  for Mr. Jenkins
  3.  
  4.  
  5. //Standard=0   Rush Hour=1       Night time=2
  6. int TRAFFIC_MODE = 2;
  7.  
  8. bool TRAFFIC_EMULATE_SIDEWALK = true;
  9. bool TRAFFIC_ADVANCED_GREEN = true;
  10. bool TRAFFIC_FLASHING = true;//Flashing red side streets, Flashing yellow main streets.
  11.  
  12.  
  13. //define all of the LED pins, some of them use same pins because arduino has little pins available
  14. //left right
  15. int TRAFFIC1_RED     = 2;
  16. int TRAFFIC1_YELLOW  = 3;
  17. int TRAFFIC1_GREEN   = 4;
  18. //top bottom
  19. int TRAFFIC2_RED     = 5;
  20. int TRAFFIC2_YELLOW  = 6;
  21. int TRAFFIC2_GREEN   = 7;
  22.  
  23. int PEDLIGHT1        = 8;
  24. int PEDLIGHT2        = 9;
  25.  
  26. int PEDBUTTON1       = 10;
  27. int PEDBUTTON2       = 11;
  28.  
  29. //add this much to traffic timer to allow peds more time
  30. int TRAFFIC_WAIT_FOR_PED_TIMER = 1500;
  31.  
  32.  
  33. bool PedLight1 = false;
  34. bool PedLight2 = false;
  35.  
  36. //incremenets this as lights are switched to simulate real pedestrians pressing buttons
  37. int PedLightCycle = 0;
  38.  
  39. void setup()
  40. {
  41.   pinMode(TRAFFIC1_RED, OUTPUT);
  42.   pinMode(TRAFFIC1_YELLOW, OUTPUT);
  43.   pinMode(TRAFFIC1_GREEN, OUTPUT);
  44.  
  45.   pinMode(TRAFFIC2_RED, OUTPUT);
  46.   pinMode(TRAFFIC2_YELLOW, OUTPUT);
  47.   pinMode(TRAFFIC2_GREEN, OUTPUT);
  48.  
  49.   pinMode(PEDLIGHT1, OUTPUT);
  50.   pinMode(PEDLIGHT2, OUTPUT);
  51.   //Not using buttons, Jenkins said to make it on a timer
  52.   //pinMode(PEDBUTTON1, INPUT);
  53.   //pinMode(PEDBUTTON2, INPUT);
  54. }
  55.  
  56.  
  57. void loop()
  58. {
  59.   //not in setup() because sidewalk changes these and sets back
  60.   int DELAYSPEED = 1000;
  61.   int DELAYSPEEDGREEN = 1500;
  62.  
  63.   if (TRAFFIC_MODE == 1) // rush hour traffic
  64.   {
  65.     DELAYSPEED = 1000;
  66.     DELAYSPEEDGREEN = 1000;
  67.   }
  68.   else if (TRAFFIC_MODE == 2) // nigtht time traffic
  69.   {
  70.     DELAYSPEED = 1000;
  71.     DELAYSPEEDGREEN = 2250;
  72.   }
  73.  
  74.   //Strat traffic light logic under.
  75.   digitalWrite(TRAFFIC1_RED, HIGH);
  76.   digitalWrite(TRAFFIC2_RED, HIGH);
  77.  
  78.   if (TRAFFIC_EMULATE_SIDEWALK)
  79.   {
  80.     PedLightCycle++;
  81.     if (PedLightCycle == 2)
  82.       PedLight1 = true;
  83.     else if (PedLightCycle == 3)
  84.     {
  85.       PedLight2 = true;
  86.       PedLightCycle = 0;
  87.     }
  88.   }
  89.   else
  90.   {
  91.     //Read inputs, cache them for later. nvm, Not using buttons, Jenkins said to make it on a timer
  92.     /*if (digitalRead(PEDBUTTON1) == HIGH)
  93.       PedLight1 = true;
  94.       if (digitalRead(PEDBUTTON2) == HIGH)
  95.       PedLight2 = true;*/
  96.   }
  97.  
  98.   digitalWrite(TRAFFIC1_RED, LOW);
  99.  
  100.   if (PedLight1)
  101.   {
  102.     digitalWrite(PEDLIGHT1, HIGH);
  103.     DELAYSPEED = DELAYSPEED + TRAFFIC_WAIT_FOR_PED_TIMER; // allow pedestrians more time to walk during red/yellow
  104.   }
  105.   if (TRAFFIC_ADVANCED_GREEN)
  106.   {
  107.     //assume that each flash is 300ms, with 100ms break in between.
  108.     int numflashes = (DELAYSPEEDGREEN / 400); //example = 2000ms green delay becomes 5 flashes.
  109.     for (int i = 0; i < numflashes; ++i)
  110.     {
  111.       digitalWrite(TRAFFIC1_GREEN, LOW);
  112.       delay(100);
  113.       digitalWrite(TRAFFIC1_GREEN, HIGH);
  114.       delay(300);
  115.     }
  116.   }
  117.   else
  118.   {
  119.     digitalWrite(TRAFFIC1_GREEN, HIGH);
  120.     delay(DELAYSPEEDGREEN);
  121.   }
  122.  
  123.   digitalWrite(TRAFFIC1_GREEN, LOW);
  124.  
  125.   if (TRAFFIC_FLASHING) // Main streets first
  126.   {
  127.     //assume that each flash is 300ms, with 100ms break in between.
  128.     int numflashes = (DELAYSPEEDGREEN / 400); //using green delay, so traffic gets time
  129.     for (int i = 0; i < numflashes; ++i)
  130.     {
  131.       digitalWrite(TRAFFIC1_YELLOW, LOW);
  132.       delay(100);
  133.       digitalWrite(TRAFFIC1_YELLOW, HIGH);
  134.       delay(300);
  135.     }
  136.   }
  137.  
  138.   //allow original yellow code to run, to make cars slow down
  139.   digitalWrite(TRAFFIC1_YELLOW, HIGH);
  140.   delay(DELAYSPEED);
  141.  
  142.  
  143.   if (PedLight1)
  144.   {
  145.     digitalWrite(PEDLIGHT1, LOW);
  146.     DELAYSPEED = DELAYSPEED - TRAFFIC_WAIT_FOR_PED_TIMER; // no more ped light. restore
  147.   }
  148.   digitalWrite(TRAFFIC1_YELLOW, LOW);
  149.  
  150.  
  151.   if (TRAFFIC_FLASHING) // side streets flash
  152.   {
  153.     //assume that each flash is 300ms, with 100ms break in between.
  154.     int numflashes = (DELAYSPEEDGREEN / 400); //using green delay, so traffic gets time
  155.     for (int i = 0; i < numflashes; ++i)
  156.     {
  157.       digitalWrite(TRAFFIC1_RED, LOW);
  158.       delay(100);
  159.       digitalWrite(TRAFFIC1_RED, HIGH);
  160.       delay(300);
  161.     }
  162.   }
  163.  
  164.   //allow original red code to run, to make cars slow down
  165.   digitalWrite(TRAFFIC1_RED, HIGH);
  166.  
  167.   //all traffic stopped for this time
  168.   delay(DELAYSPEED);
  169.  
  170.  
  171.   //begin logic for second row of trafic lights here
  172.  
  173.   digitalWrite(TRAFFIC2_RED, LOW);
  174.   digitalWrite(TRAFFIC2_GREEN, HIGH);
  175.   if (PedLight2)
  176.   {
  177.     digitalWrite(PEDLIGHT2, HIGH);
  178.     DELAYSPEED = DELAYSPEED + TRAFFIC_WAIT_FOR_PED_TIMER; // allow pedestrians more time to walk during red/yellow
  179.   }
  180.   delay(DELAYSPEEDGREEN);
  181.   digitalWrite(TRAFFIC2_GREEN, LOW);
  182.   digitalWrite(TRAFFIC2_YELLOW, HIGH);
  183.   delay(DELAYSPEED);
  184.   if (PedLight2)
  185.   {
  186.     digitalWrite(PEDLIGHT2, LOW);
  187.     DELAYSPEED = DELAYSPEED - TRAFFIC_WAIT_FOR_PED_TIMER; // no more ped light, restore original time
  188.   }
  189.   digitalWrite(TRAFFIC2_YELLOW, LOW);
  190.   digitalWrite(TRAFFIC2_RED, HIGH);
  191.  
  192.   delay(DELAYSPEED);
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement