//Crear un dado electrónico*/
//Aray con los pines g=5, f=17, e=4, d=16, c=0, b=15, a=2 del ESP32
const int pines[7] = {2, 15, 0, 16, 4, 17, 5};
const int pin_dp = 18; //Se declara PIN 18 como PUNTO del display
//Matriz de valores binarios de combinaciones del display
//{--gfedcba}
const byte number_display[10] = {0b1000000, //Numero 0
0b1111001, //Numero 1
0b0100100, //Numero 2
0b0110000, //Numero 3
0b0011001, //Numero 4
0b0010010, //Numero 5
0b0000010, //Numero 6
0b1111000, //Numero 7
0b0000000, //Numero 8
0b0010000}; //Numero 9
int botton = 12; //PIN 12 botón
boolean botton_state = 0; //variable estado lectura botón
boolean last_botton_state = 0; //variable último estado lectura botón
void setup() {
//Inicialización serial por pantalla
Serial.begin(1000);
Serial.println("Actividad 2: Crear un dado electrónico");
for(int i=0; i < 7 ; i++){ //Recorrer el array de 0 a posicion 7
pinMode(pines[i], OUTPUT); //se inicializa cada pin de la posición "i"
digitalWrite(pines[i], 1);
}
pinMode(pin_dp, OUTPUT);
digitalWrite(pin_dp, 1);
//Inicialización pin del botón
pinMode(botton, INPUT);
//Incialización Semilla para generar números aleatorios
randomSeed(analogRead(13)); //La semilla es el valor de ruido de leer un PIN no usado
}
void loop() {
//LA LECTURA DEL BOTON SE REALIZA EN ESTE PUNTO
botton_state = digitalRead(botton);
//COMPARADOR PULSAR BOTÓN
if (last_botton_state != botton_state){
if(botton_state == HIGH){
//SE APAGA DISPLAY
digitalWrite(pin_dp, 0);
for (int i=0; i < 7; i++){
digitalWrite(pines[i],1);
}
delay(100);
digitalWrite(pin_dp, 1);
botton_state == LOW;
//GENERA NÚMERO ALEATORIO según semilla
int aleatorio = random(1,7); // S e cuenta hasta el 7 ya que en la tabla declarada
// en la parte superior consta en el 7 el numero 6
activar_display(aleatorio); //Se muestra en display número aleatorio
Serial.println(aleatorio); //Se muestra en serial número aleatorio
delay(200);
}
}
last_botton_state = botton_state; //Se almacena último estado botón
delay(100);
}
/*FUNCION PARA MOSTRAR NUMERO EN EL DISPLAY
Al indicar el numero que se quiere mostrar,
Se elige la fila de la lista "number_display[10]" y se obtiene una cadena de bits*/
void activar_display(int number){
byte arraybit = number_display[number]; //Almacena la cadena de bits de posicion "numero"
for (int i=0; i < 7; i++){ //Se recorre cada posición del display
int bit = bitRead(arraybit, i); //Lectura del bit en cada posición del array de bits
digitalWrite(pines[i],bit); //Escritura en cada PIN del valor de cada bit
}
}