Este circuito actúa como un dado electrónico interactivo. Al presionar el botón, se activa primero un efecto visual en el que los segmentos del display de 7 segmentos parpadean de manera aleatoria durante aproximadamente un segundo, creando una animación dinámica y atractiva. Una vez culminado este efecto, el sistema genera y muestra un número aleatorio del 1 al 6, imitando el comportamiento de un dado real.
Materiales necesarios
- Arduino Uno (o compatible)
- Display LED de 8 segmentos (ánodo común)
- 8 resistencias de 220 Ω
- Botón pulsador
- Resistencia de 10k Ω
- Protoboard (Breadboard)
- Cables de conexión (Jumper wires)
Circuito

Código
int boton = 0; // Variable para leer el estado del botón
int numero = 0; // Número aleatorio que se mostrará en el display
// Definir pines para cada segmento (suponiendo display de ánodo común)
const int segA = 7;
const int segB = 6;
const int segC = 5;
const int segD = 4;
const int segE = 3;
const int segF = 2;
const int segG = 9;
// Si cuentas con un octavo segmento (por ejemplo, el punto decimal), asigna otro pin:
// const int segDP = 10;
void setup() {
pinMode(8, INPUT); // Pin del botón
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);
// pinMode(segDP, OUTPUT); // Si usas el punto decimal
// Inicializa la semilla para números aleatorios (por ejemplo, leyendo un valor analógico no conectado)
randomSeed(analogRead(0));
}
void randomEffect() {
// Efecto aleatorio: durante 1 segundo, cada segmento se enciende o apaga de forma aleatoria
unsigned long startTime = millis();
while (millis() - startTime < 1000) { // 1000 ms = 1 segundo
digitalWrite(segA, random(0, 2)); // random(0,2) retorna 0 o 1 (para display de ánodo común: LOW enciende, HIGH apaga)
digitalWrite(segB, random(0, 2));
digitalWrite(segC, random(0, 2));
digitalWrite(segD, random(0, 2));
digitalWrite(segE, random(0, 2));
digitalWrite(segF, random(0, 2));
digitalWrite(segG, random(0, 2));
// Si cuentas con el segmento del punto decimal:
// digitalWrite(segDP, random(0, 2));
delay(100); // Breve retraso para apreciar el cambio
}
}
void displayNumber(int num) {
// Muestra un dígito específico en el display de 7 segmentos (ánodo común: LOW enciende el segmento)
switch (num) {
case 1:
digitalWrite(segA, HIGH);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
break;
case 2:
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, HIGH);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, HIGH);
digitalWrite(segG, LOW);
break;
case 3:
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, LOW);
break;
case 4:
digitalWrite(segA, HIGH);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
break;
case 5:
digitalWrite(segA, LOW);
digitalWrite(segB, HIGH);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, HIGH);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
break;
case 6:
digitalWrite(segA, LOW);
digitalWrite(segB, HIGH);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
break;
default:
// En caso de valor no esperado, se apagan todos los segmentos
digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
break;
}
}
void loop() {
boton = digitalRead(8); // Leer el estado del botón
if (boton == HIGH) {
// Al presionar el botón, se ejecuta el efecto de encendido aleatorio
randomEffect();
// Luego se genera y muestra un número aleatorio del 1 al 6
numero = random(1, 7); // random(1,7) genera valores entre 1 y 6
displayNumber(numero);
delay(200); // Pequeño retraso para evitar múltiples lecturas en un solo clic
}
}
Versiones y mejoras posibles
- Agregar un buzzer
- Agregar un segundo display para 2 digitos