Vous êtes sur la page 1sur 4

/* Cronometro de dos Digigitos en 7 Segmentos usando multiplexacion

con boton de inicio y parada


Por: http://elprofegarcia.com/

Conexiones: Las conexiones entre el Arduino y el Display deben realizarse


con una resistencia de 1K ohmio.
Ver plano en:
https://www.dropbox.com/s/vcv94773r49nf2m/Plano%20cronometro%207%20seg.jpg?dl=
0
ARDUINO - Display 7 Segmentos (catodo comun)
2 a
3 b
4 c
5 d
6 e
7 f
8 g
9 P

10 COM digito izquierdo usando Transistor NPN


11 COM digito derecho usando Transistor NPN
12 - Boton de inicio (se activa con GND)
13 - Boton de parada (se activa con GND)
Sitio donde se compro todos los componentes:
http://dinastiatecnologica.com/producto/display-7-segmentos-doble/
*/

int inicio=1; // variable para el boton de inicio


int parada=1; // variable para el boton de parada
int activar_boton_inicio=1; // activa boton de inicio con "1" desactiva con
"0"
int activar_boton_parada=0; // activa boton de parada con "1" desactiva con
"0"
int activar_incremento=0; // activa incremento del contador con "1"
desactiva con "0"

int retardo=10; // tiempo que dura encendido cada 7 seg (10 mili
segundos)
int var=0; // Valor del digito que se va a desplegar por el 7 seg.
int unidad=0; // cuenta las unidades (derecha)
int decena=0; // cuenta las decenas (izquierda)
int conmutador=0; // multiplexacion de uno a otro 7 segmentos
int cont=0; // contador de ciclos de espera para cambiar de numero

void setup() {
pinMode(2, OUTPUT); //seg a
pinMode(3, OUTPUT); //seg b
pinMode(4, OUTPUT); //seg c
pinMode(5, OUTPUT); //seg d
pinMode(6, OUTPUT); //seg e
pinMode(7, OUTPUT); //seg f
pinMode(8, OUTPUT); //seg g

pinMode(10, OUTPUT); // activa digito 1 derecha (unidad)


pinMode(11, OUTPUT); // activa digito 2 izquierda (decena)

pinMode(12, INPUT); // boton de inicio


pinMode(13, INPUT); // boton de parada
}

void loop() {

inicio=digitalRead(12); // lee el estado del boron de inicio


parada=digitalRead(13); // lee el estado del boton de parada

delay(retardo); // tiempo que dura encendido cada 7seg antes de


cambiar al otro
if (inicio==0){ // si oprime boton de inicio el cronometro
inicializa en 00
if(activar_boton_inicio==1){ // si esta activado el boton de inicio
unidad=0; // inicializa las unidades (derecha)
decena=0; // inicializa las decenas (izquierda)
activar_boton_inicio=0; // desactiva boton de inicio
activar_boton_parada=1; // activa boton de parada
activar_incremento=1; //desactiva el incremento del contador
}
}
if (parada==0){ // si oprime boton parada
if(activar_boton_parada==1){ // si esta activado el boton de parada
activar_boton_parada=0; // desactiva boton de parada
activar_boton_inicio=1; // activa boton de inicio
activar_incremento=0; //desactiva el incremento del contador
}
}

if(activar_incremento==1){ // si esta activo el incremento del


contador
cont++; // incrementa el contador de ciclos en Uno
}

if (cont==10){ // cada cuanto tiempo (ciclos)cambia un


numero
cont=0; // inicializa el contador de ciclos
unidad=unidad+1; // incrementa la unidad, primer 7seg
if (unidad >= 10){ // cuando la unidad llegue a 10 incrementa
la decena
decena=decena+1; // incrementa la decena, segundo 7seg
unidad=0; // regresa la unidad a cero
if (decena>=10){ // cuando la decena llegue a 10 se
inicializa a cero
decena=0;
}
}
}

if (conmutador == 0) { // hace la multiplexacion conmutando entre los


dos 7seg izq y der
digitalWrite(10, 1); // enciende el derecho
digitalWrite(11, 0); // apaga el izquierdo
var=unidad; // iguala la variable que escribe el numero en
el 7seg al valor de la unidad
conmutador=1; // cambia el conmutador para que en el siguiente
ciclo cumpla la otra condicion

}
else{
digitalWrite(10, 0); // apaga el derecho
digitalWrite(11, 1); // enciende el izquierdo
var=decena; // iguala la variable que escribe el numero en
el 7seg al valor de la decena
conmutador=0; // cambia el conmutador para que en el
siguiente ciclo cumpla la otra condicion

switch (var) {
case 1: //escribe en el 7seg el numero 1
digitalWrite(2, 0);
digitalWrite(3, 1);
digitalWrite(4, 1);
digitalWrite(5, 0);
digitalWrite(6, 0);
digitalWrite(7, 0);
digitalWrite(8, 0);
break;
case 2: //escribe en el 7seg el numero 2
digitalWrite(2, 1);
digitalWrite(3, 1);
digitalWrite(4, 0);
digitalWrite(5, 1);
digitalWrite(6, 1);
digitalWrite(7, 0);
digitalWrite(8, 1);
break;
case 3: //escribe en el 7seg el numero 3
digitalWrite(2, 1);
digitalWrite(3, 1);
digitalWrite(4, 1);
digitalWrite(5, 1);
digitalWrite(6, 0);
digitalWrite(7, 0);
digitalWrite(8, 1);
break;
case 4: //escribe en el 7seg el numero 4
digitalWrite(2, 0);
digitalWrite(3, 1);
digitalWrite(4, 1);
digitalWrite(5, 0);
digitalWrite(6, 0);
digitalWrite(7, 1);
digitalWrite(8, 1);
break;
case 5: //escribe en el 7seg el numero 5
digitalWrite(2, 1);
digitalWrite(3, 0);
digitalWrite(4, 1);
digitalWrite(5, 1);
digitalWrite(6, 0);
digitalWrite(7, 1);
digitalWrite(8, 1);
break;
case 6: //escribe en el 7seg el numero 6
digitalWrite(2, 1);
digitalWrite(3, 0);
digitalWrite(4, 1);
digitalWrite(5, 1);
digitalWrite(6, 1);
digitalWrite(7, 1);
digitalWrite(8, 1);
break;
case 7: //escribe en el 7seg el numero 7
digitalWrite(2, 1);
digitalWrite(3, 1);
digitalWrite(4, 1);
digitalWrite(5, 0);
digitalWrite(6, 0);
digitalWrite(7, 0);
digitalWrite(8, 0);
break;
case 8: //escribe en el 7seg el numero 8
digitalWrite(2, 1);
digitalWrite(3, 1);
digitalWrite(4, 1);
digitalWrite(5, 1);
digitalWrite(6, 1);
digitalWrite(7, 1);
digitalWrite(8, 1);
break;
case 9: //escribe en el 7seg el numero 9
digitalWrite(2, 1);
digitalWrite(3, 1);
digitalWrite(4, 1);
digitalWrite(5, 0);
digitalWrite(6, 0);
digitalWrite(7, 1);
digitalWrite(8, 1);
break;
case 0: //escribe en el 7seg el numero 0
digitalWrite(2, 1);
digitalWrite(3, 1);
digitalWrite(4, 1);
digitalWrite(5, 1);
digitalWrite(6, 1);
digitalWrite(7, 1);
digitalWrite(8, 0);
break;
default:
digitalWrite(2, 0);
digitalWrite(3, 0);
digitalWrite(4, 0);
digitalWrite(5, 0);
digitalWrite(6, 0);
digitalWrite(7, 0);
digitalWrite(8, 0);
}
}

Vous aimerez peut-être aussi