/*Actividad 2: Programación Mi Nombre display de 7 segmentos*/
//realizado por Chistian Benavides
//Aray con los pines g=5, f=17, e=4, d=16, c=0, b=15, a=2 del ESP32
//El orden de los pines para el array es a-b-c-d-e-f-g
const int pines[7] = {2, 15, 0, 16, 4, 17, 5};
const int pin_dp = 18; //Se declara PIN 18 como PUNTO del display
//Declaración de la matriz de valores binarios de combinaciones del display
//{--gfedcba}
const byte number_display[10] = {0b1000000, //Numero 0
0b1111001, //Numero 1
0b0100100, //Numero 2
0b0110000, //Numero 3
0b0011001, //Numero 4
0b0010010, //Numero 5
0b0000010, //Numero 6
0b1111000, //Numero 7
0b0000000, //Numero 8
0b0010000}; //Numero 9
//Array de abecedario
const int abecedario[27] = {'A','B','C','D','E','F','G','H','I','J','K',
'L','M','N','O','P','Q','R','S','T',
'U','V','W','X','Y','Z'};
char nombre[] = "CHRISTIAN"; //Nombre a descomponer
void setup() {
//Inicialización serial por pantalla
Serial.begin(115200);
Serial.println("Actividad 2: Programación Mi Nombre display de 7 segmentos");
//Inicialización pines del display:
for(int i=0; i < 7 ; i++){ //permite recorrer el array de 0 a posicion 7
pinMode(pines[i], OUTPUT); //se inicializa cada pin de la posición "i"
}
pinMode(pin_dp, OUTPUT);
digitalWrite(pin_dp, 1);
}
void loop() {
//VARIBLES INTERNAS DEL LOOP
int longitud_cadena = sizeof(nombre)-1; //Calcula tamaño de cadena texto NOMBRE
int nombre_number[longitud_cadena] ={}; //Se declara array que contine valores de cada letra
int longitud_lista = 0; //longitud array de todos los valores menores de 10
int numero[longitud_lista] = {}; //Array de números menores de 10 según letras
//BUCLE de transformacion cadena texto en array números menores de 10
for(int i=0; i<longitud_cadena; i++){
for (int j =0; j < 27; j++) { //Bucle comparador con el array abecedario
if(nombre[i] == abecedario[j]){
nombre_number[i] = j + 1; //Array almacena valor de la letra en el abecedario
if (nombre_number[i] < 10){ //Condicional valor abecedario menor 10
longitud_lista = longitud_lista + 1; //Longitud lista números se incrementa en 1
numero[i] = nombre_number[i]; //Array numero almacena el valor de la letra menor de 10
activar_display(numero[i]); //Se muestra en display el valor
Serial.println(numero[i]); //Se muestra en serial el valor
delay(1000);
}
else if((nombre_number[i] >= 10) && (nombre_number[i] < 20)){ //Condicional valor abecedario menor 20 y mayor 10
longitud_lista = longitud_lista + 2; //Longitud lista aumenta en 2, por ser cifra de 2 digitos
numero[i] = 1; //Array número almacena el primer valor de cifra de 2 digitos
numero[i+1] = nombre_number[i] - 10; //Array número almacena el segundo valor de cifra de 2 digitos
activar_display(numero[i]); //Se muestra primer digito en display el valor
Serial.println(numero[i]); //Se muestra primer digito en serial el valor
delay(1000);
activar_display(numero[i+1]); //Se muestra segundo digito en display el valor
Serial.println(numero[i+1]); //Se muestra segundo digito en serial el valor
delay(1000);
}
else if(nombre_number[i] >= 20){ //Condicional valor abecedario mayor 20
longitud_lista = longitud_lista + 2; //Longitud lista aumenta en 2, por ser cifra de 2 digitos
numero[i] = 2; //Array número almacena el primer valor de cifra de 2 digitos
numero[i+1] = nombre_number[i] - 20; //Array número almacena el segundo valor de cifra de 2 digitos
activar_display(numero[i]); //Se muestra primer digito en display el valor
Serial.println(numero[i]); //Se muestra primer digito en serial el valor
delay(1000);
activar_display(numero[i+1]); //Se muestra segundo digito en display el valor
Serial.println(numero[i+1]); //Se muestra segundo digito en serial el valor
delay(1000);
}
}
}
}
//SE APAGA DISPLAY
digitalWrite(pin_dp, 0);
for (int i=0; i < 7; i++){
digitalWrite(pines[i],1);
}
delay(1000);
digitalWrite(pin_dp, 1);
}
/*FUNCION PARA RECORRER MOSTRAR NUMERO EN EL DISPLAY
Al indicar el número que se quiere mostrar,
Se elige la fila de la lista "number_display[10]" y se obtiene una cadena de bits*/
void activar_display(int number){
byte arraybit = number_display[number]; //Almacena la cadena de bits de posición "numero"
for (int i=0; i < 7; i++){ //Se recorre cada posición del display
int bit = bitRead(arraybit, i); //Lectura del bit en cada posición del array de bits
digitalWrite(pines[i],bit); //Escritura en cada PIN del valor de cada bit
}
}