/*Dado electrónico
Utiliza la placa Arduino UNO y una protoboard para implementar un
dado electrónico.
Nada más resetar el microcontrolador, éste comenzará a contar del
1 al 6 periódicamente a mucha velocidad. De esta forma, el usuario no
podrá distinguir el número que apareceen la pantalla de 7 segmentos.
Cuando el usuario apriete un pulsador, la cuenta se detendrá durante
dos segundos, de forma que el usuario podrá ver el valor de la tirada
del dado electrónico
NOTA: Este código está desarrollado para una pantalla de CÁTODO
COMÚN. Es decir, cada segmento se enciende poniéndolo a NIVEL ALTO.
Por otro lado, el pulsador empleado será activo a NIVEL BAJO.*/
//PINB Es para leer el estado del puerto B
//PORTB Es para escribir en el puerto B
//PULSADORES 2,3,4 (7 - 0) PUERTO D
//DDRD = B00000011
//LEDS 10,11,12 (AREF, GND, 13 -8)PUERTO B
//DDRB=B11111111
/*#define a 13
#define b 12
#define c 11
#define d 10
#define e 9
#define f 8*/
#define g 7
#define PULS 6
byte numero = 0;
boolean estadoLed = true; //guarda el estado del led (encendido o apagado)
int intervaloEncendido = 300; // tiempo que esta encendido el led
int IntervaloApagado = 800; // tiempo que esta apagado el led
unsigned long tiempoAnteriorEncendido = 0; //guarda tiempo de referencia para comparar
unsigned long tiempoAnteriorApagado = 0; //guarda tiempo de referencia para comparar
void setup() {
/*pinMode (a, OUTPUT);
pinMode (b, OUTPUT);
pinMode (c, OUTPUT);
pinMode (d, OUTPUT);
pinMode (e, OUTPUT);
pinMode (f, OUTPUT);*/
pinMode (g, OUTPUT);
pinMode (PULS, INPUT_PULLUP);
DDRB=B111111;//Configura los leds del pin 13 al 8
}
void loop() {
numero++;
if(numero==7){
numero=1;
}
switch (numero) {
case 1: //NÚMERO 1
/*digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);*/
//PORTB=B011000; //En binario
PORTB=0X18;//En hexadecimal
digitalWrite(g, LOW);
break;
case 2: //NÚMERO 2
/*digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);*/
//PORTB=B110110;
PORTB=54; //En decimal
PORTB=066;//Enoctal
digitalWrite(g, HIGH);
break;
case 3: //NÚMERO 3
/*digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);*/
PORTB=B111100;
digitalWrite(g, HIGH);
break;
case 4: //NÚMERO 4
/*digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);*/
PORTB=B011001;
digitalWrite(g, HIGH);
break;
case 5: //NÚMERO 5
/*digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);*/
PORTB=B101101;
digitalWrite(g, HIGH);
break;
case 6: //NÚMERO 6
/*digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);*/
PORTB=B101111;
digitalWrite(g, HIGH);
break;
}
if (digitalRead(PULS)==LOW) {
delay(2000);
}
else {
delay(20);
}
}
/*
boolean estadoLed = true; //guarda el estado del led (encendido o apagado)
int intervaloEncendido = 300; // tiempo que esta encendido el led
int IntervaloApagado = 800; // tiempo que esta apagado el led
unsigned long tiempoAnteriorEncendido = 0; //guarda tiempo de referencia para comparar
unsigned long tiempoAnteriorApagado = 0; //guarda tiempo de referencia para comparar
#define ledVerde1 2
void setup() {
pinMode(ledVerde1,OUTPUT); //configura el pin como salida
digitalWrite(ledVerde1,estadoLed); //enciende el led
}
void loop() {
if((millis()-tiempoAnteriorEncendido>=intervaloEncendido)&&estadoLed==true){ //si ha transcurrido el periodo programado
estadoLed=false; //actualizo la variable para apagar el led
digitalWrite(ledVerde1,estadoLed); //apago el led
tiempoAnteriorApagado=millis(); //guarda el tiempo actual para comenzar a contar el tiempo apagado
}
if((millis()-tiempoAnteriorApagado>=IntervaloApagado)&&estadoLed==false){ //si ha transcurrido el periodo programado
estadoLed=true; //actualizo la variable para encender el led
digitalWrite(ledVerde1,estadoLed); //enciendo el led
tiempoAnteriorEncendido=millis(); //guarda el tiempo actual para comenzar a contar el tiempo encendido
}
}
*/