#include <TimerOne.h>
int ms = 0;
int ss = 0;
int mn = 0;
int hs = 0;
int dia = 0;
int dis_seg[7] = {2, 3, 4, 5, 6, 7, 8};
int dig1 = 9; // Pin para el primer dígito
int dig2 = 10; // Pin para el segundo dígito
const byte Display[10] = {
0b1000000, // 0
0b1111001, // 1
0b0100100, // 2
0b0110000, // 3
0b0011001, // 4
0b0010010, // 5
0b0000010, // 6
0b1111000, // 7
0b0000000, // 8
0b0010000 // 9
};
volatile int A = 0;
void setup()
{
Timer1.initialize(1000); // Configuramos el timer para 1ms
Timer1.attachInterrupt(ISR_Blink); // Configuramos la interrupción
// Configuramos los pines del display como salidas
for (int i = 0; i < 7; i++)
{
pinMode(dis_seg[i], OUTPUT);
}
pinMode(dig1, OUTPUT);
pinMode(dig2, OUTPUT);
}
void numDisplay(int num, int pos)
{
// Actualizamos el display con el número correspondiente
byte segmentos = Display[num];
for (int i = 0; i < 7; i++)
{
digitalWrite(dis_seg[i], bitRead(segmentos, i));
}
// Si es el segundo dígito, activamos el punto decimal
if (pos == 1)
{
digitalWrite(dis_seg[6], HIGH);
}
}
void ISR_Blink()
{
A = 1;
}
void loop()
{
if (A == 1)
{
A = 0;
ms++; // Incrementamos los milisegundos en cada interrupción
if (ms == 1000)
{
ss++;
ms = 0;
}
if (ss == 60)
{
mn++;
ss = 0;
}
if (mn == 60)
{
hs++;
mn = 0;
}
if (hs == 24)
{
dia++;
hs = 0;
}
// Mostramos los segundos en el display
digitalWrite(dig1, HIGH); // Enciende el primer dígito
digitalWrite(dig2, LOW); // Apaga el segundo dígito
numDisplay(ss % 10, 0); // Muestra el dígito de las unidades de los segundos
digitalWrite(dig1, LOW); // Apaga el primer dígito
digitalWrite(dig2, HIGH); // Enciende el segundo dígito
numDisplay((ss / 10) % 10, 1); // Muestra el dígito de las decenas de los segundos
}
}