//ENTRADAS
int R1 = 12;
int AM1 = 13;
int V1 = 14;
int R2 = 2;
int AM2 = 4;
int V2 = 5;
int PEA = 27; 

const int BOTONS = 15; 
const int BOTONP = 16;
const int BOTONPEA = 17;

int A = 0;
int B = 0;

//INICIALIZAR SALIDAS DE LAS VARIABLES

void setup() {
  pinMode(R1,OUTPUT); 
  pinMode(AM1,OUTPUT);
  pinMode(V1,OUTPUT);

  pinMode(R2,OUTPUT);
  pinMode(AM2,OUTPUT);
  pinMode(V2,OUTPUT);

  pinMode(PEA,OUTPUT);

  pinMode(BOTONS, INPUT);
  pinMode(BOTONP, INPUT_PULLUP);
  pinMode(BOTONPEA, INPUT_PULLUP);


  attachInterrupt(digitalPinToInterrupt(BOTONP), PARO, RISING);
  attachInterrupt(digitalPinToInterrupt(BOTONPEA), PASO, RISING);

}

void loop() {

  //COLOCAR LOS VALORES INICIALES DE LOS SEMAFOROS
  digitalWrite(R1,LOW);
  digitalWrite(AM1,LOW);
  digitalWrite(V1,LOW);
  digitalWrite(R2,LOW);
  digitalWrite(AM2,LOW);
  digitalWrite(V2,LOW);

  
  while (digitalRead(BOTONS) == HIGH) { //MIENTRAS NO SE PRESIONE EL BOTON SE MANTENDRAN LOS VALORES ANTERIORES
  
  if(A == 0 && B == 0)  { 

  //PRIMER SEMAFORO
  digitalWrite(R1,HIGH);
  digitalWrite(AM1,LOW);
  digitalWrite(V1,LOW);
  
  digitalWrite(R2,LOW);
  digitalWrite(AM2,LOW);
  digitalWrite(V2,HIGH);
  digitalWrite(PEA,LOW);

  delay(3000);

  //PARPADEO VERDE
  for(int j=0;j<=3;j++)
  {
  delay(500);
  digitalWrite(V2,LOW);
  delay(500);
  digitalWrite(V2,HIGH); 
  }

  //CAMBIO ENTRE EL PRIMER Y SEGUNDO SEMAFORO
  digitalWrite(AM2,HIGH);
  digitalWrite(V2,LOW);
  delay(1000);

  //SEGUNDO SEMAFORO
  digitalWrite(R1,LOW);
  digitalWrite(AM1,LOW);
  digitalWrite(V1,HIGH);

  digitalWrite(R2,HIGH);
  digitalWrite(AM2,LOW);
  digitalWrite(V2,LOW);

  delay(3000);

  //PARPADEO VERDE
  for(int j=0;j<=3;j++)
  {
  delay(500);
  digitalWrite(V1,LOW);
  delay(500);
  digitalWrite(V1,HIGH); 
  }

  //CAMBIO ENTRE PRIMER Y SEGUNDO SEMAFORO
  digitalWrite(AM1,HIGH);
  digitalWrite(V1,LOW);
  delay(1000);
    }
    else if (A == 1) { 
      digitalWrite(R1,LOW);
      digitalWrite(AM1,HIGH);
      digitalWrite(V1,LOW);

      digitalWrite(R2,LOW);
      digitalWrite(AM2,HIGH);
      digitalWrite(V2,LOW);
       //PARPADEO AMARILLO
      for(int j=0;j<=10;j++)
      {
      delay(500);
      digitalWrite(AM1,LOW);
      digitalWrite(AM2,LOW);
      delay(500);
      digitalWrite(AM1,HIGH); 
      digitalWrite(AM2,HIGH);
    }
    A = 0;
    B = 0;
    digitalWrite(BOTONS,HIGH);
  }

  if (B == 1) {
      digitalWrite(PEA,HIGH);
      digitalWrite(R1,HIGH);
      digitalWrite(AM1,LOW);
      digitalWrite(V1,LOW);

      digitalWrite(R2,HIGH);
      digitalWrite(AM2,LOW);
      digitalWrite(V2,LOW);
      delay(5000);

      //PARPADEO PEATON
      for(int j=0;j<=3;j++)
      {
      delay(500);
      digitalWrite(PEA,LOW);
      delay(500);
      digitalWrite(PEA,HIGH); 
      }
      A = 0;
      B = 0;
      digitalWrite(BOTONS,HIGH);
    }
  }
}

void PARO () {
  A = 1;
  }

void PASO () {
  B = 1;
  }