int tiempo = 1000;
byte display[] = {
0b01111110, // 0
0b00001100, // 1
0b10110110, // 2
0b10011110, // 3
0b11001100, // 4
0b11011010, // 5
0b11111010, // 6
0b00001110, // 7
0b11111110, // 8
0b11001110 // 9
};
void setup() {
pinMode(12, OUTPUT); // Rojo vial
pinMode(11, OUTPUT); // Verde peatonal
pinMode(10, OUTPUT); // Verde vial
pinMode(9, OUTPUT); // Rojo peatonal
pinMode(8, OUTPUT); // Display
DDRD = 0xFF; // Configurar todos los pines de PORTD como salida
}
void loop() {
// Apagar los semáforos y mostrar el número
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(8, LOW);
delay(500);
// Encender los semáforos y mostrar el número
digitalWrite(8, HIGH);
digitalWrite(12, HIGH);
for (int i = 9; i >= 0; i--) {
PORTD = display[i];
delay(tiempo);
PORTD = 0b00000000;
}
// Rojo-rojo (semáforo vial y peatonal en rojo) - Pausa corta
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
delay(500); // Mantener ambos semáforos en rojo por un corto período (500ms)
// Cambiar a verde peatonal
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(12, LOW);
delay(900); // Tiempo de espera para el cambio
digitalWrite(11, HIGH); // Verde peatonal
delay(300); // Tiempo extra para seguridad
// Mostrar números en el display para el semáforo peatonal
for (int i = 9; i >= 0; i--) {
PORTD = display[i];
delay(tiempo);
PORTD = 0b00000000;
}
delay(1000); // Tiempo para el semáforo peatonal
// Cambiar a rojo peatonal
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(12, HIGH); // Vial en rojo
delay(300); // Pausa corta antes de cambiar
digitalWrite(9, HIGH); // Vial en verde
delay(300); // Pausa corta
digitalWrite(9, LOW); // Apagar el verde vial
delay(tiempo); // Mantener el semáforo en este estado por un tiempo
}