Arduino Traffic Light System
This circuit was tested and worked properly!
Check out this video below to see how the traffic lights system is working.
The code is written based on 4 situations:
- the first traffic light (TF1) has the red signal and the pedestrians ON; the second one (TF2) has green ON.
- TF1 has red and yellow ON; TF2 has yellow ON
- TF1 is green now and TF2 is red and pedestrians ON
- TF1 is yellow and TF2 is red and yellow
Code of the Arduino Traffic Lights Sketch
// Source: http://www.electroschematics.com/10178/arduino-traffic-light-system/ int trafficLights1[] = {2,3,4,5}; // red, yellow, green, pedestrians led pins int trafficLights2[] = {6,7,8,9}; // red, yellow, green, pedestrians led pins int situations = 4; int duration[] = {8000,3000,10000,3000}; // duration of each situation long previousCars = 0; long previousPeds = 0; long interval = 300; //blink interval for pedestrians int ledState = LOW; int state; int i = 0; void setup() { for(int i = 0; i < 4; i++) { pinMode(trafficLights1[i], OUTPUT); pinMode(trafficLights2[i], OUTPUT); } Serial.begin(9600); } void loop() { unsigned long currentMillis = millis(); if(currentMillis - previousCars < duration[i]) { situation(i); } else { previousCars = currentMillis; if(i >= situations) { i = 0; } else { i++; } } } void activateTrafficLight1(String lights, int pedestrians) { for(int x = 0; x < 3; x++) { if(lights[x] == '0') state = LOW; if(lights[x] == '1') state = HIGH; digitalWrite(trafficLights1[x], state); } if(pedestrians == 1) { blinkPed(trafficLights1[3]); } else { digitalWrite(trafficLights1[3], LOW); } } void activateTrafficLight2(String lights, int pedestrians) { for(int x = 0; x < 3; x++) { if(lights[x] == '0') state = LOW; if(lights[x] == '1') state = HIGH; digitalWrite(trafficLights2[x], state); } if(pedestrians == 1) { blinkPed(trafficLights2[3]); } else { digitalWrite(trafficLights2[3], LOW); } } void situation(int i) { switch(i){ case 0: activateTrafficLight1("100",1); // 100 means red ON, yellow OFF, green OFF activateTrafficLight2("001",0); // the second parameter is for pedestrians break; // 1 is ON and 0 is OFF case 1: activateTrafficLight1("110",0); // 110: red ON, yellow ON, green OFF activateTrafficLight2("010",0); break; case 2: activateTrafficLight1("001",0); activateTrafficLight2("100",1); break; case 3: activateTrafficLight1("010",0); activateTrafficLight2("110",0); break; } } void blinkPed(int ped) { unsigned long currentMillis = millis(); if(currentMillis - previousPeds > interval) { previousPeds = currentMillis; if (ledState == LOW) ledState = HIGH; else ledState = LOW; digitalWrite(ped, ledState); } }
No comments:
Post a Comment
its cool