Lesson 6 Homework Answers

Your circuit should now look like the one above and your code has a few minor changes from Week 5’s homework. You have to add an interrupt to allow the switch to activate the walk signal.
int red1 =3;
int yel1 = 4;
int grn1 =5;
int red2 =6;
int yel2 =7;
int grn2 =8;
int walk =9;
int crosswalk = 2;
volatile bool buttonPressed = false;
void setup() {
//Setup the output pins for all the lights.
pinMode(red1,OUTPUT);
pinMode(yel1,OUTPUT);
pinMode(grn1,OUTPUT);
pinMode(red2,OUTPUT);
pinMode(yel2,OUTPUT);
pinMode(grn2,OUTPUT);
pinMode(walk,OUTPUT);
// Setup the crosswalk button notice the interrupt
pinMode(crosswalk, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(crosswalk), handleButtonPress, FALLING);
}
void loop() {
if (buttonPressed) {
//Makes traffic yeild
digitalWrite(red1, 0);
digitalWrite(yel1, 1);
digitalWrite(grn1, 0);
digitalWrite(red2, 0);
digitalWrite(yel2, 1);
digitalWrite(grn2, 0);
delay (1000);
//Makes traffic stop and walkers walk.
digitalWrite(red1, 1);
digitalWrite(yel1, 0);
digitalWrite(grn1, 0);
digitalWrite(red2, 1);
digitalWrite(yel2, 0);
digitalWrite(grn2, 0);
digitalWrite(walk, 1);
delay (5000);
digitalWrite(walk, 0);
//resets the interrupt
buttonPressed = false;
}
//loops through all the different light patterns.
digitalWrite(red1, 1);
digitalWrite(yel1, 0);
digitalWrite(grn1, 0);
digitalWrite(red2, 0);
digitalWrite(yel2, 0);
digitalWrite(grn2, 1);
delay (2000);
digitalWrite(red1, 0);
digitalWrite(yel1, 1);
digitalWrite(grn1, 0);
digitalWrite(red2, 0);
digitalWrite(yel2, 1);
digitalWrite(grn2, 0);
delay (1000);
digitalWrite(red1, 0);
digitalWrite(yel1, 0);
digitalWrite(grn1, 1);
digitalWrite(red2, 1);
digitalWrite(yel2, 0);
digitalWrite(grn2, 0);
delay (2000);
digitalWrite(red1, 0);
digitalWrite(yel1, 1);
digitalWrite(grn1, 0);
digitalWrite(red2, 0);
digitalWrite(yel2, 1);
digitalWrite(grn2, 0);
delay (1000);
}
//Activates the interrupt when the button is pressed.
void handleButtonPress() {
buttonPressed=true;
}
