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
}
No comments:
Post a Comment