Simulación del lanzamiento de un dado con un display 7 segmentos.
Cuando pulsamos el botón, simulamos lanzar el dado, va rodando hasta que para en una cara.
Código:
//array con los pines donde van conectados los segmentos
int ledPins[] = {2, 3, 4, 5, 10, 9, 8, 7}; //los pines se pueden cambiar según
//sea la conexión mas adecuada en la placa
int pulsador=6; //conectaremos el pulsadoral pin 6
int die[6][8]={
/* array con las combinaciones de encendido/apagado para cada núnero
pin 2
**********
8 * *3
* 9 *
**********
7 * *4
* *
********** * 5
10
*/
//1
{0,1,1,1,0,0,0,0},
//2
{1,1,0,1,1,1,0,1},
//3
{1,1,1,1,1,0,0,1},
//4
{0,1,1,1,0,0,1,1},
//5
{1,0,1,1,1,0,1,1},
//6
{0,0,1,1,1,1,1,1},
};
/*
usamos waitTime para simular un tiempo en el que el
dado está rodando indicando las diferentes caras
*/
float waitTime=1;
void setup(){
//Configura cada pin como salida
for(int i=0;i<8;i++){
pinMode(ledPins[i],OUTPUT);
}
pinMode(pulsador,INPUT); //Configura el pulsador como entrada
/*Genera una semilla en la función random. Usamos el valor de
A0, cuando no está conectado a nada, Nos aporta una señal
electrica debido al ruido. Ésta será aleatoria y no va bien
para nuestro caso
*/
randomSeed(analogRead(A0));
}
void loop(){
//reinicia el tiempo de espera
waitTime=2;
/*
Imaginamos que el dado cuando se tira va rodando
mostrando las distintas caras. El giro cada vez
es mas lento, hasta que se detiene
*/
while(waitTime<1000){
/*
Genera valores aleatorios.
The die value can be 1 to 6, in the array it's
die[0] to die[5]. random(0,6) generate a value
between 0 to 6, that would be 0 to 5 in effect.
*/
int value;
value=random(0,6);
//Muestra el valor del dado
displayDie(value);
/*
See why waitTime have to be float? If it's an integer,
multiply it by 1.3 will make it lose everything behind
the decimal mark. We use 2 as the starting value,
2*1.3 should be 2.6, losing the fractional parts means
it'll be 2 in the end, so 2*1.3=2! It'll
*/
waitTime=waitTime*1.3;
delay(waitTime);
}
/*
Now the die is stable, wait untill the tilt switch is
activated again. ts.pressed() stops the whole program
until it's activated.
*/
while (digitalRead (pulsador)==0){
delay(10);
}
}
void displayDie(int num){
//Show the die value by turning on/off the right leds
for(int i=0;i<8;i++){
digitalWrite(ledPins[i],die[num][i]);
}
}
No hay comentarios:
Publicar un comentario