#include <Button.h>
#include <TimerFive.h>
byte tabla7seg[10]={0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6f};
byte pines_display[7]={3,4,5,6,7,8,9};
byte pines_pantalla[4]={14,15,16,17};
#define punto 2
unsigned int contador=0;
unsigned int minutos=0;
unsigned long t1;
volatile int display=0;
void saca7seg(int n) {
for (int i=0;i<7;i++) digitalWrite(pines_display[i], bitRead(tabla7seg[n],i));
}
void ISR_pantalla() {
if (display == 0) {
digitalWrite(pines_pantalla[3],HIGH);
saca7seg(contador%10);
digitalWrite(pines_pantalla[0],LOW);
display=1;
}
else if (display == 1) {
digitalWrite(pines_pantalla[0],HIGH);
saca7seg(contador/10);
digitalWrite(pines_pantalla[1],LOW);
display=2;
}
else if (display == 2){
digitalWrite(pines_pantalla[1], HIGH);
display=3;
if (minutos>0){
saca7seg(minutos%10);
digitalWrite(punto, HIGH);
digitalWrite(pines_pantalla[2], LOW);
}
}
else{
digitalWrite(pines_pantalla[2], HIGH);
display=0;
digitalWrite(punto, LOW);
if (minutos>=10){
saca7seg(minutos/10);
digitalWrite(pines_pantalla[3], LOW);
}
}
}
Button boton1 = Button(20);
void setup() {
for (int i=0;i<7;i++) {
pinMode(pines_display[i], OUTPUT);
}
for (int i=0;i<4;i++) {
pinMode(pines_pantalla[i], OUTPUT);
digitalWrite(pines_pantalla[i], HIGH);
}
pinMode(punto, OUTPUT);
Timer5.initialize(10000);
Timer5.attachInterrupt(ISR_pantalla); // 10000 microsegundos => 10 centesima de segundo
boton1.begin();
t1=millis();
}
void loop() {
if (boton1.pressed()) {
contador=0;
t1=millis();
}
if (millis()-t1>1000) {
if (++contador==60) {
contador=0; ++minutos;
}
t1+=1000;
}
delay(10);
}