#include <TM1637.h> // Libreria : Grove 4-Digit Display
const int CLK = 2;
const int DIO = 3;
unsigned long tempo=0;
int counter = 100; // countdown in secondi con pausa = 1000
int cnt= counter;
int pausa = 1000; // millis() countdown 1 sec. con pausa = 1000
int fast =100; // millis() countdown veloce
byte stato = 0;
TM1637 tm(CLK, DIO);
void setup() {
pinMode(9, OUTPUT);
pinMode(10,INPUT_PULLUP);
pinMode(11,INPUT_PULLUP);
pinMode(12,INPUT_PULLUP);
pinMode(13,INPUT_PULLUP);
tm.init();
tm.set(BRIGHT_TYPICAL);
}
void loop() {
if (!digitalRead(13) and stato !=3)(stato=1);
if (!digitalRead(12))(stato=2);
if (!digitalRead(11) and stato==1)(stato=3);
if (!digitalRead(10) or counter<0)(stato=4);
switch (stato){
case 1:
pausa=1000;
countdown();
break;
case 2:
while (stato==2){
if (!digitalRead(13))(stato=1);(counter=cnt);
if (!digitalRead(10))(stato=4);
}
break;
case 3:
pausa=fast;
countdown();
break;
case 4:
while (stato==4){
if (!digitalRead(13))(stato=1);(counter=cnt);
digitalWrite(9,HIGH);
for(int i=0;i<4;i++)(tm.display(i,15));
digitalWrite(9,HIGH);
delay(150);
if (!digitalRead(13))(stato=1);(counter=cnt);
for(int i=0;i<4;i++)(tm.display(i,13));
digitalWrite(9,LOW);
delay(150);
}
break;
}
}
void countdown(){
if (millis()-tempo>=pausa){
//tm.point(POINT_ON);
tm.display(0, (counter / 1000) % 10);
tm.display(1, (counter / 100) % 10);
tm.display(2, (counter / 10) % 10);
tm.display(3, counter % 10);
counter--;
tempo=millis();
}
}