In this project we are going to extend the previous project to include a set of pedestrian lights and a pedestrian push button to request to cross the road. The Arduino will react when the button is pressed by changing the state of the lights to make the cars stop and allow the pedestrian to cross safely. In this project we are able to interact with the Arduino and cause it to do something when we change the state of a button that the Arduino is watching (i.e. Press it to change the state from open to closed).
Connect it up
Connect the LED?s and the switch up as in the diagram. You will need to shuffle the wires along from pins 8, 9 and 10 in the previous project to pins 10, 11 and 12 to allow you to connect the pedestrian lights to pins 8 and 9.
Enter the code
Enter the code on the next page, verify and upload it. When you run the program you will see that the car traffic light starts on green to allow cars to pass and the pedestrian light is on red. and if so passes code execution to the function we have created called changeLights(). In this function the car lights go from green to amber then red, then the pedestrian lights go green. After a period of time set in the variable crossTime (time enough to allow the pedestrians to cross) the green pedestrian light will flash on and off as a warning to the pedestrians to get a hurry on as the lights are about to change back to red. Then the pedestrian light changes back to red and the vehicle lights go from red to amber to green and the traffic can resume. The code in this project is similar to the previous project. However, there are a few new statements and concepts that have been introduced so let?s take a look at those. When you press the button, the program checks that at least 5 seconds have gone by since the last time the lights were changed (to allow traffic to get moving),
// Project Interactive Traffic Lights int carRed = 12; // assign the car lights int carYellow = 11; int carGreen = 10; int pedRed = 8; // assign the pedestrian lights int pedGreen = 9; int button = 2; // button pin int crossTime = 5000; // time allowed to cross unsigned long changeTime; // time since button pressed void setup() { pinMode(carRed, OUTPUT); pinMode(carYellow, OUTPUT); pinMode(carGreen, OUTPUT); pinMode(pedRed, OUTPUT); pinMode(pedGreen, OUTPUT); pinMode(button, INPUT); // button on pin 2 // turn on the green light digitalWrite(carGreen, HIGH); digitalWrite(pedRed, HIGH); } void loop() { int state = digitalRead(button); /* check if button is pressed and it is over 5 seconds since last button press */ if (state == HIGH && (millis() - changeTime) > 5000) { // Call the function to change the lights changeLights(); } } void changeLights() { digitalWrite(carGreen, LOW); // green off digitalWrite(carYellow, HIGH); // yellow on delay(2000); // wait 2 seconds digitalWrite(carYellow, LOW); // yellow off digitalWrite(carRed, HIGH); // red on delay(1000); // wait 1 second till its safe digitalWrite(pedRed, LOW); // ped red off digitalWrite(pedGreen, HIGH); // ped green on delay(crossTime); // wait for preset time period // flash the ped green for (int x=0; x<10; x++) { digitalWrite(pedGreen, HIGH); delay(250); digitalWrite(pedGreen, LOW); delay(250); } // turn ped red on digitalWrite(pedRed, HIGH); delay(500); digitalWrite(carYellow, HIGH); // yellow on digitalWrite(carRed, LOW); // red off delay(1000); digitalWrite(carGreen, HIGH); digitalWrite(carYellow, LOW); // yellow off // record the time since last change of lights changeTime = millis(); // then return to the main program loop }