/*
Andrés Eduardo Zúñiga López
Display de 7 segmentos, ESP32 y botón
Diseño de un dado
*/
#include <Arduino.h>
//Pines del display A 22, B 23, C 32, D 33, E 25, F 21, G 19
const int segmentPins[] = {22, 23, 32, 33, 25, 21, 19};
const int buttonPin = 4; // Pin donde está conectado el botón
// Define los patrones para los dígitos 0-9 en el display de 7 segmentos
const byte digitPatterns[] = {
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111 // 9
};
bool buttonPressed = false;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
// Configura los pines de los segmentos como salidas. Son 7 segmentos
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
}
randomSeed(analogRead(0)); // Inicializa la generación de números aleatorios con un valor analógico
}
void loop() {
if (digitalRead(buttonPin) == HIGH) {
if (!buttonPressed) {
buttonPressed = true;
int randomNumber = random(1, 7); // Genera un número aleatorio entre 1 y 6
displayNumber(randomNumber);
delay(2000); // Muestra el número durante 2 segundos
turnOffDisplay();
}
} else {
buttonPressed = false;
turnOffDisplay();
}
}
void displayNumber(int number) {
if (number >= 0 && number <= 9) {
// Enciende los segmentos correspondientes para mostrar el número
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], bitRead(digitPatterns[number], i) == 0);
}
}
}
void turnOffDisplay() {
// Apaga todos los segmentos para volver a iniciar
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], HIGH);
}
}