#include <Arduino.h>
// Establecemos un arreglo para los pines a-g del display de 7 segmentos con ESP32
// Considerar "g=5, f=17, e=4, d=16, c=0, b=15, a=2"
const int segmentPins[7] = {2, 15, 0, 16, 4, 17, 5};
const int dpPin = 18; // usamos este pin para el punto del display
// Declaramos la matriz de valores binarios de combinaciones del display
const byte numberDisplay[10] = {
//{--gfedcba}
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
};
int botton = 12;
boolean botton_state = 0; //lectura botón
boolean last_botton_state = 0; //ultima lectura botón
void setup() {
Serial.begin(9600);
Serial.println("Ejercicio: Crear un dado electrónico");
//Inicialización pines del display:
for(int i=0; i < 7 ; i++){ //array de 0 a posicion 7
pinMode(segmentPins[i], OUTPUT); //inicializa cada pin de la posición "i"
digitalWrite(segmentPins[i], 0); //inicia la pantalla apagada
}
pinMode(dpPin, OUTPUT);
digitalWrite(dpPin, 1);
pinMode(botton, INPUT);
randomSeed(analogRead(13));
}
//LECTURA/COMPARA BOTÓN
void loop() {
botton_state = digitalRead(botton);
if (last_botton_state != botton_state){
if(botton_state == HIGH){
//APAGAR DISPLAY
digitalWrite(dpPin, 0);
for (int i=0; i < 7; i++){
digitalWrite(segmentPins[i],1);
}
delay(2000);
digitalWrite(dpPin, 1);
botton_state == LOW;
//GENERA NÚMERO ALEATORIO
int aleatorio = random(1,6);
activar_display(aleatorio);
Serial.println(aleatorio);
delay(2000);
}
}
last_botton_state = botton_state; //Ultimo estado botón
delay(2000);
}
/*MOSTRAR NUMERO EN EL DISPLAY*/
void activar_display(int number){
byte arraybit = numberDisplay[number];
for (int i=0; i < 7; i++){
int bit = bitRead(arraybit, i);
digitalWrite(segmentPins[i],bit);
}
}