// Array con los pines del ESP32 conectados al display de 7 segmentos
const int pines_display[7] = {2, 3, 4, 5, 6, 7, 8};
// Pin del botón que se utilizará para lanzar el dado
const int pin_boton = 42;
// Variable que almacenará el estado leído del botón (LOW o HIGH)
int estado;
// Variable para controlar si el botón ya fue presionado
bool boton_presionado = false;
// Matriz que representa los valores del 1 al 6 para mostrar en el display (cátodo común)
// Cada fila es un número, y cada columna un segmento: a, b, c, d, e, f, g
const byte numeros[6][7] = {
{0,1,1,0,0,0,0}, // Número 1
{1,1,0,1,1,0,1}, // Número 2
{1,1,1,1,0,0,1}, // Número 3
{0,1,1,0,0,1,1}, // Número 4
{1,0,1,1,0,1,1}, // Número 5
{1,0,1,1,1,1,1} // Número 6
};
void setup() {
// Configura los 7 pines del display como salidas digitales
for (int i = 0; i < 7; i++)
pinMode(pines_display[i], OUTPUT);
// Configura el pin del botón como entrada con resistencia pull-up interna
pinMode(pin_boton, INPUT_PULLUP);
}
void loop() {
// Lee el estado actual del botón: LOW si se presiona, HIGH si no lo está
estado = digitalRead(pin_boton);
// Evalúa el estado del botón mediante un switch
switch (estado) {
// Si el botón está presionado
case LOW:
// Solo ejecuta si no estaba marcado como presionado
if (!boton_presionado) {
// Marca que el botón fue presionado
boton_presionado = true;
// Genera un número aleatorio entre 1 y 6
int n = random(1, 7);
// Muestra el número en el display activando los segmentos
for (int i = 0; i < 7; i++) {
// Enciende/apaga cada segmento según el número
digitalWrite(pines_display[i], numeros[n - 1][i]);
}
// Pequeño retardo para evitar rebote del botón
delay(300);
}
// Sale de caso
break;
// Si el botón no está presionado
case HIGH:
// Permite detectar la siguiente pulsación
boton_presionado = false;
// Sale del caso
break;
}
}