// pin 21,22, 2, 4, 5,19,18     
// dec  a, b, c, d, e, f, g
// (0)  1  1  1  1  1  1  0
// (1)  0  1  1  0  0  0  0 
// (2)  1  1  0  1  1  0  1 
// (3)  1  1  1  1  0  0  1
// (4)  0  1  1  0  0  1  1
// (5)  1  0  1  1  0  1  1
// (6)  1  0  1  1  1  1  1
// (7)  1  1  1  0  0  0  0
// (8)  1  1  1  1  1  1  1
// (9)  1  1  1  1  0  1  1

#define PIN_DISPLAY_UNIDADES 21
#define PIN_DISPLAY_DECENAS 22,
#define PIN_LED_ROJO 14
#define PIN_LED_VERDE 23

const byte number_display[10] = {
  0b0111111,   //Número 0
  0b0000110,   //Número 1
  0b1011011,   //Número 2
  0b1001111,   //Número 3
  0b1100110,   //Número 4
  0b1101101,   //Número 5
  0b1111101,   //Número 6
  0b0000111,   //Número 7
  0b1111111,   //Número 8
  0b1101111};  //Número 9 

void mostrarDisplayUnidades(int number) {
  byte arraybit = number_display[number];
  
  for (int i = 0; i < 7; i++) {
    int bit = bitRead(arraybit, i);
    digitalWrite(PIN_DISPLAY_UNIDADES + i, bit);
  }
}

void mostrarDisplayDecenas(int number) {
  byte arraybit = number_display[number];
  
  for (int i = 0; i < 7; i++) {
    int bit = bitRead(arraybit, i);
    digitalWrite(PIN_DISPLAY_DECENAS + i, bit);
  }
}

void setup() {
  for (int i = 0; i < 7; i++) {
    pinMode(PIN_DISPLAY_UNIDADES + i, OUTPUT);
    pinMode(PIN_DISPLAY_DECENAS + i, OUTPUT);
  }
  
  pinMode(PIN_LED_ROJO, OUTPUT);
  pinMode(PIN_LED_VERDE, OUTPUT);
}

void loop() {
  // Temporizador inicial de 30 segundos
  for (int dec = 30; dec >= 0; dec--) {
    int unidades = dec % 10;
    int decenas = dec / 10;
    mostrarDisplayUnidades(unidades);
    mostrarDisplayDecenas(decenas);
    delay(1000);
  }

  // Mostrar luz verde
  digitalWrite(PIN_LED_VERDE, HIGH);
  delay(30000);  // Esperar 30 segundos

  // Apagar luz verde y encender luz roja
  digitalWrite(PIN_LED_VERDE, LOW);
  digitalWrite(PIN_LED_ROJO, HIGH);
  delay(5000);  // Esperar 5 segundos

  // Apagar luz roja
  digitalWrite(PIN_LED_ROJO, LOW);
}