/*Actividad 2: Manejo y programación del display de 7 segmentos
Asignatura: Sensores, Dispositivos Redes y Protocolos de Comunicacion
Alumno: Jaime Zamudio Soplin
Ejercicio: Dado Electronico */
#include <SevSeg.h>
#include "Button.h"
#include "config.h"
//**************************************************************************
// Configuración
// Para este apartado utilizamos una configuración en cátodo común.
// Asignamos los pines del ESP32 a cada segmento del display.
#define A 2
#define B 15
#define C 0
#define D 16
#define E 4
#define F 17
#define G 5
#define DP 18
// Asignamos un pin del display para el pulsador.
int PulsadorPin = 12;
// Inicializamos la variable numeroAleatorio a 0.
int numeroAleatorio= 0;
// Configuramos la comunicación serie, los pines de salida y entrada del ESP32 e inicializamos la funcion generadora de numeros aleatorios.
void setup() {
Serial.begin(115200); // Configuracion del puerto serie a una velocidad de 115200 baudios.
pinMode(A, OUTPUT); // Configuracion de pin A como salida.
pinMode(B, OUTPUT); // Configuracion de pin B como salida.
pinMode(C, OUTPUT); // Configuracion de pin C como salida.
pinMode(D, OUTPUT); // Configuracion de pin D como salida.
pinMode(E, OUTPUT); // Configuracion de pin E como salida.
pinMode(F, OUTPUT); // Configuracion de pin F como salida.
pinMode(G, OUTPUT); // Configuracion de pin G como salida.
pinMode(DP, OUTPUT); // Configuracion de pin DP como salida.
pinMode(PulsadorPin, INPUT); // Configuracion de pin del pulsador como entrada.
randomSeed(6); // Inicialización del generador de numeros aleatorios con una semilla de 6 para el dado electrónico.
}
//**************************************************************************
// Programa
void loop() {
// Leemos el estado del pulsador y si está a 1 generamos un numero aleatorio entre 1 y 6.
if (digitalRead(PulsadorPin) == HIGH) {
delay(50); // Espera un tiempo para evitar rebotes del botón.
numeroAleatorio = random(1, 7); // Genera un número aleatorio entre 1 y 6, lo almacena en la variable numeroAleatorio.
Serial.println("Número aleatorio: " + String(numeroAleatorio)); // Muestras el numero generado en la consola por el puerto serie.
// Activa las salidas de los segmentos para mostrar en el display el valor de la variable numeroAleatorio.
switch (numeroAleatorio){
// 11111100
case 0:
digitalWrite(A,HIGH);
digitalWrite(B,HIGH);
digitalWrite(C,HIGH);
digitalWrite(D,HIGH);
digitalWrite(E,HIGH);
digitalWrite(F,HIGH);
digitalWrite(G,LOW);
digitalWrite(DP,LOW);
break;
// 01100000 Prende Leds para numero 1
case 1:
digitalWrite(A,LOW);
digitalWrite(B,HIGH);
digitalWrite(C,HIGH);
digitalWrite(D,LOW);
digitalWrite(E,LOW);
digitalWrite(F,LOW);
digitalWrite(G,LOW);
digitalWrite(DP,LOW);
break;
// 11011010 Prende Leds para numero 2
case 2:
digitalWrite(A,HIGH);
digitalWrite(B,HIGH);
digitalWrite(C,LOW);
digitalWrite(D,HIGH);
digitalWrite(E,HIGH);
digitalWrite(F,LOW);
digitalWrite(G,HIGH);
digitalWrite(DP,LOW);
break;
// 11110010 Prende Leds para numero 3
case 3:
digitalWrite(A,HIGH);
digitalWrite(B,HIGH);
digitalWrite(C,HIGH);
digitalWrite(D,HIGH);
digitalWrite(E,LOW);
digitalWrite(F,LOW);
digitalWrite(G,HIGH);
digitalWrite(DP,LOW);
break;
// 01100110 Prende Leds para numero 4
case 4:
digitalWrite(A,LOW);
digitalWrite(B,HIGH);
digitalWrite(C,HIGH);
digitalWrite(D,LOW);
digitalWrite(E,LOW);
digitalWrite(F,HIGH);
digitalWrite(G,HIGH);
digitalWrite(DP,LOW);
break;
// 10110110 Prende Leds para numero 5
case 5:
digitalWrite(A,HIGH);
digitalWrite(B,LOW);
digitalWrite(C,HIGH);
digitalWrite(D,HIGH);
digitalWrite(E,LOW);
digitalWrite(F,HIGH);
digitalWrite(G,HIGH);
digitalWrite(DP,LOW);
break;
// 10111110 Prende Leds para numero 6
case 6:
digitalWrite(A,HIGH);
digitalWrite(B,LOW);
digitalWrite(C,HIGH);
digitalWrite(D,HIGH);
digitalWrite(E,HIGH);
digitalWrite(F,HIGH);
digitalWrite(G,HIGH);
digitalWrite(DP,LOW);
break;
}
}
delay(100);
}