#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); 
  }
}