Default-image

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;   
}
 

Share via
Copy link
Powered by Social Snap