#include <Arduino.h>
// Aray con los pines a-g del display de 7 segmentos (cátodo común) en el ESP32
const int segmentPins[] = {2, 15, 0, 16, 4, 17, 5};
const int dpPin = 18; // Pin para el punto del display
// Declaración de la matriz de valores binarios de combinaciones del display
const byte numberDisplay[10] = {
B1000000, // Número 0
B1111001, // Número 1
B0100100, // Número 2
B0110000, // Número 3
B0011001, // Número 4
B0010010, // Número 5
B0000010, // Número 6
B1111000, // Número 7
B0000000, // Número 8
B0010000 // Número 9
};
// Array de abecedario
const char abecedario[] = {'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[] = "BRAYAN"; // Nombre a descomponer
void setup() {
// Inicialización serial para la comunicación
Serial.begin(115200);
Serial.println("Actividad 2: Programación Mi Nombre display de 7 segmentos");
// Inicialización de los pines del display
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
}
pinMode(dpPin, OUTPUT);
digitalWrite(dpPin, HIGH);
}
void loop() {
// Variables internas del bucle
int longitudCadena = sizeof(nombre) - 1;
int nombreNumber[longitudCadena] = {};
int longitudLista = 0;
int numero[longitudLista] = {};
// Bucle para transformar la cadena de texto en una lista de números menores de 10
for (int i = 0; i < longitudCadena; i++) {
for (int j = 0; j < sizeof(abecedario); j++) {
if (nombre[i] == abecedario[j]) {
nombreNumber[i] = j + 1;
if (nombreNumber[i] < 10) {
longitudLista++;
numero[i] = nombreNumber[i];
Serial.print(abecedario[j]);
Serial.print(" = ");
Serial.println(numero[i]);
activarDisplay(numero[i]);
delay(1000);
} else if (nombreNumber[i] >= 10 && nombreNumber[i] < 20) {
longitudLista += 2;
numero[i] = 1;
numero[i + 1] = nombreNumber[i] - 10;
Serial.print(abecedario[j]);
Serial.print(" = ");
Serial.print(numero[i]);
Serial.print(numero[i + 1]);
Serial.println();
activarDisplay(numero[i]);
delay(1000);
activarDisplay(numero[i + 1]);
delay(1000);
} else if (nombreNumber[i] >= 20) {
longitudLista += 2;
numero[i] = 2;
numero[i + 1] = nombreNumber[i] - 20;
Serial.print(abecedario[j]);
Serial.print(" = ");
Serial.print(numero[i]);
Serial.print(numero[i + 1]);
Serial.println();
activarDisplay(numero[i]);
delay(1000);
activarDisplay(numero[i + 1]);
delay(1000);
}
}
}
}
// Apagar el display
digitalWrite(dpPin, LOW);
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], HIGH);
}
delay(1000);
digitalWrite(dpPin, HIGH);
}
void activarDisplay(int number) {
byte arrayBit = numberDisplay[number];
for (int i = 0; i < 7; i++) {
int bit = bitRead(arrayBit, i);
digitalWrite(segmentPins[i], bit);
}
}