//Taller 1 - Sensores y Actuadores
//Luis Carlos Mosquera Castillo


//Pines del Display 7 segmentos
int PinesDisplay[] = {2,15,0,16,4,17,5}; //a,b,c,d,e,f,g
//Numeros
/*int cero[] = {0,0,0,0,0,0,1};
int uno[] = {1,0,0,1,1,1,1}; //a,b,c,d,e,f,g
int dos[] = {0,0,1,0,0,1,0};
int tres[] = {0,0,0,0,1,1,0};
int cuatro[] = {1,0,0,1,1,0,0};
int cinco[] = {0,1,0,0,1,0,0};*/

int numeros [6][7] = {{0,0,0,0,0,0,1},
                      {1,0,0,1,1,1,1},  
                      {0,0,1,0,0,1,0}, 
                      {0,0,0,0,1,1,0}, 
                      {1,0,0,1,1,0,0}, 
                      {0,1,0,0,1,0,0}};

//Leds
int Leds[] = {26,12,32,33,25};

//Potenciometro
int PinPot = 14;
int sensor = 0;
int lectura = 0;

//Pulsador
const int botonPin = 27;
bool botonPresionado = false;
int secuencia = 0;
int estado = 0;
void setup() {

  Serial.begin(115200); //Establece la velocidad de datos en bits por segundo (baudios) para la transmisión de datos en serie
  
  pinMode(PinPot, INPUT); //Configuracion para potenciometro (INPUT)
  pinMode(botonPin, INPUT); //Configuracion para el pulsador (INPUT)

  //Configuracion para los pines del display de 7 segmentos (OUTPUT)
  for(int i = 0; i<7; i++){ //Ciclo for para recorrer el array de los numeros asociados a los pines
    pinMode(PinesDisplay[i], OUTPUT);
  }

  //Configuracion para los pines de los leds (OUTPUT)
  for(int j = 0; j<5; j++){ //Iterar sobre el array de pines de los 5 leds
    pinMode(Leds[j], OUTPUT);
  }
    
  
  
}



void loop() {

  lectura = analogRead(PinPot); //lectura del potenciometro
  sensor = map(lectura, 0, 4095, 700, 3000); //Mapear la lectura para guardar la velocidad del delay

  estado = digitalRead(botonPin); //Estado del boton

  if (estado == HIGH ) { //Si se presiona el boton
    secuencia = (secuencia + 1) % 3; // Cambiar entre las 3 secuencias
    Serial.println("Secuencia cambiada");
  } 

  Serial.println(estado);
  Serial.println(secuencia);

  switch(secuencia) { //Switch para controlar la secuencia
    case 0: //0 Para la primera secuencia
      //Primera secuencia: Orden de 0 a 5
      for(int i = 0; i<6; i++){ //Se recorre por filas a los numeros

        for(int j = 0; j<7; j++){ //Se itera por los pines del display y se encienden
        //i: Numero de 0 al 5
        //j: Led de Display 7 segmentos
          digitalWrite(PinesDisplay[j], numeros[i][j]);    
        }

        for (int k = 0; k < 5; k++) { //Se itera ascendientemente por los leds
          if (k < i && i>0) { //Si k (Pin de Led) es menor a i (Numero) y mayor a 0, encenderlo
            digitalWrite(Leds[k], HIGH); // Encender LEDs hasta el número mostrado
          } else {
            digitalWrite(Leds[k], LOW);  // Apagar los demás LEDs
          }
        }

        delay(sensor); //Se configura el delay con los datos obtenidos del potenciometro
      }
      break;

    case 1:
      //Segunda secuencia: Orden Descendente: 5 al 0
      for(int i = 5; i>=0; i--){ //Se recorre por filas a los numeros de manera descentende (Del 5 al 0)

        for(int j = 0; j<7; j++){//Se itera por los pines del display y se encienden
        //i: Numero de 0 al 5
        //j: Led de Display 7 segmentos
          digitalWrite(PinesDisplay[j], numeros[i][j]);    
        }
        
        for (int k = 0; k < 5; k++) {//Se itera ascendientemente por los leds
          if (k < i && i>0) {//Si k (Pin de Led) es menor a i (Numero) y mayor a 0, encenderlo
            digitalWrite(Leds[k], HIGH); // Encender LEDs hasta el número mostrado
          } else {
            digitalWrite(Leds[k], LOW);  // Apagar los demás LEDs
          }
        }

        delay(sensor);
      }
      break;

    case 2:
      //Tercera Secuencia: Mostrar numeros aleatorios
      int aleatorio = random(0, 6); //Se genera un numero aleatorio con random
      for(int j = 0; j<7; j++){//Se itera por los pines del display y se encienden
        //j: Led de Display 7 segmentos
        //Aleatorio: numero a mostrar
        digitalWrite(PinesDisplay[j], numeros[aleatorio][j]);    
      }

      for (int k = 0; k < 5; k++) {
        if (k < aleatorio && aleatorio >0) {//Si k (Pin de Led) es menor al numero aleatorio y mayor a 0, encenderlo
          digitalWrite(Leds[k], HIGH); // Encender LEDs hasta el número mostrado
        } else {
          digitalWrite(Leds[k], LOW);  // Apagar los demás LEDs
        }
      }

      delay(sensor);
      break;
  }

  for(int n = 0; n<6; n++){ //Apagar leds al finalizar o cambiar la secuencia
    digitalWrite(Leds[n], LOW);
  }   
  
  

}
$abcdeabcde151015202530fghijfghij