// Definir orden de los LEDs
#define rojo 4
#define amarillo 3
#define verde 2
// 4 Semáforos: 0,1,2
void setup() {
// Salidas para semáforos
for(int i=2; i<=13; i++)
{
pinMode(i, OUTPUT);
digitalWrite(i, LOW);
}
// Salidas para las flechas
pinMode(A4, OUTPUT);
pinMode(A5, OUTPUT);
digitalWrite(A4, LOW);
digitalWrite(A5, LOW);
// PEATONAL
pinMode(A3, OUTPUT);
digitalWrite(A3, LOW);
pinMode(A2, OUTPUT);
digitalWrite(A2, LOW);
// Programa en paralelo
// Copiar los semáforos
SREG = (SREG & 0b01111111);
TIMSK2 = TIMSK2|0b00000001;
TCCR2B = 0b00000111;
SREG = (SREG & 0b01111111) | 0b10000000;
}
void loop() {
// Encender ROJOS
digitalWrite(10, HIGH);
digitalWrite(7, HIGH);
paso(0);
digitalWrite(10, HIGH);
digitalWrite(4, HIGH);
paso(1);
digitalWrite(4, HIGH);
digitalWrite(7, HIGH);
paso(2);
}
void paso(short semaforo)
{
digitalWrite(3*semaforo+rojo, LOW);
digitalWrite(3*semaforo+verde, HIGH);
delay(4000); // Encendido el verde
// Parpadea el verde
digitalWrite(3*semaforo+verde, LOW);
delay(400);
digitalWrite(3*semaforo+verde, HIGH);
delay(400);
digitalWrite(3*semaforo+verde, LOW);
delay(400);
digitalWrite(3*semaforo+verde, HIGH);
delay(400);
digitalWrite(3*semaforo+verde, LOW);
delay(400);
digitalWrite(3*semaforo+verde, HIGH);
delay(400);
digitalWrite(3*semaforo+verde, LOW);
digitalWrite(3*semaforo+amarillo, HIGH);
delay(1500);
digitalWrite(3*semaforo+amarillo, LOW);
}
// COPIAR SEMAFORO
ISR(TIMER2_OVF_vect){
digitalWrite(A4, digitalRead(2));
digitalWrite(A5, digitalRead(5));
digitalWrite(11, digitalRead(8));
digitalWrite(12, digitalRead(9));
digitalWrite(13, digitalRead(10));
digitalWrite(A3, (digitalRead(7) || digitalRead(5)) && digitalRead(10));
digitalWrite(A2, (digitalRead(8) || digitalRead(10)) && digitalRead(4) && digitalRead(7));
}