/*Actividad 2: Programación Mi Nombre display de 7 segmentos*/
//realizado por Chistian Benavides
// modificado para:
// 1) mostrar mensaje al terminar el nombre
// 2) apagar proceso con botón rojo
/* Francisco Oyarzo Estubo aqui */
//Array 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; // PIN 18 como punto del display
// Declaración de la matriz de valores binarios
// {--gfedcba}
const byte number_display[10] = {0b1000000, //0
0b1111001, //1
0b0100100, //2
0b0110000, //3
0b0011001, //4
0b0010010, //5
0b0000010, //6
0b1111000, //7
0b0000000, //8
0b0010000}; //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'};
// Nombre ingresado por consola
String nombre = "";
// Pin del botón rojo
const int pin_boton = 19;
// Bandera para saber si el nombre ya se ingresó
bool nombreIngresado = false;
bool tieneMinusculas(String str) {
int i = 0;
while (i < str.length()) {
char c = str[i];
if (c >= 'a' && c <= 'z') {
return true; // Si encuentra una minúscula, devuelve true inmediatamente
}
i++; // Incrementar contador
}
return false; // Si no encontró ninguna minúscula
}
void setup() {
Serial.begin(115200);
Serial.println(" Actividad 2: Mi Nombre en Display 7 Segmentos ");
Serial.println("Ingresa tu nombre en MAYÚSCULAS y presiona ENTER:");
// Inicialización de pines del display
for(int i=0; i < 7 ; i++){
pinMode(pines[i], OUTPUT);
}
pinMode(pin_dp, OUTPUT);
digitalWrite(pin_dp, 1);
// Botón rojo con pull-up
pinMode(pin_boton, INPUT_PULLUP);
}
void loop() {
// Leer nombre desde consola
if (!nombreIngresado && Serial.available() > 0) {
nombre = Serial.readStringUntil('\n');
nombre.trim();
nombreIngresado = true;
Serial.print("Nombre recibido: ");
Serial.println(nombre);
}
// Verificar si el nombre tiene minúsculas
if (tieneMinusculas(nombre)) {
Serial.println("Error: El nombre contiene letras en minúscula. Usar MAYÚSCULAS.");
Serial.println("Advertencia: Las letras en minúscula no se mostrarán en el display.");
// Reiniciar para pedir otro nombre y NO repetir el error en cada loop
nombreIngresado = false;
nombre = "";
return; // salir del loop() esta vez
}
if (!nombreIngresado) return; // esperar nombre
// Si el botón está presionado apagar display mientras tanto
if (digitalRead(pin_boton) == LOW) {
apagarDisplay();
return;
}
// Mostrar el nombre una vez
for (int i=0; i<nombre.length(); i++) {
// Si presionan el botón a mitad de proceso, se apaga temporalmente
if (digitalRead(pin_boton) == LOW) {
apagarDisplay();
return;
}
char letra = nombre[i];
for (int j =0; j < 27; j++) {
if(letra == abecedario[j]){
int valor = j + 1;
if (valor < 10){
activar_display(valor);
Serial.println(valor);
delay(1000);
}
else if(valor < 20){
activar_display(1);
Serial.println(1);
delay(1000);
activar_display(valor - 10);
Serial.println(valor - 10);
delay(1000);
}
else {
activar_display(2);
Serial.println(2);
delay(1000);
activar_display(valor - 20);
Serial.println(valor - 20);
delay(1000);
}
}
}
}
// Mensaje al terminar
Serial.println("Se terminó de mostrar el nombre completo en el display :) .");
// Apagar display una vez mostrado
apagarDisplay();
// Evitar repetir el proceso
nombreIngresado = false;
Serial.println("Puedes ingresar otro nombre si quieres, no se te olvide que son en MAYÚSCULAS...");
}
/* FUNCION PARA MOSTRAR NUMERO EN EL DISPLAY */
void activar_display(int number){
byte arraybit = number_display[number];
for (int i=0; i < 7; i++){
int bit = bitRead(arraybit, i);
digitalWrite(pines[i],bit);
}
}
/* FUNCION PARA APAGAR EL DISPLAY */
void apagarDisplay(){
digitalWrite(pin_dp, 0);
for (int i=0; i < 7; i++){
digitalWrite(pines[i],1);
}
}