//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);
}
}