#include <TM1637Display.h>
#include <EEPROM.h>
#define CLK 2
#define DIO 3
TM1637Display display(CLK, DIO);
#include <ezButton.h>
ezButton menuButton(7);
ezButton startButton(6);
ezButton stopButton(5);
//#define TIMEDOWN EEPROM.read(0);
bool run = false;
bool blink;
byte mode = 0;
int second, minute;
int countTime, totalTime;
unsigned long lastMillis;
void setup() {
display.setBrightness(0x07);
display.showNumberDecEx(0, 0b11100000, true, 4, 0);
menuButton.setDebounceTime(50);
startButton.setDebounceTime(50);
stopButton.setDebounceTime(50);
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
}
void loop() {
menuButton.loop();
startButton.loop();
stopButton.loop();
if (mode == 0) {
if (menuButton.isPressed()) {
mode = 1;
minute = EEPROM.read(0);
lastMillis = millis();
}
if (stopButton.isPressed()) {
digitalWrite(13, LOW);
run = false;
display.showNumberDecEx(0, 0b11100000, true, 4, 0);
}
if (startButton.isPressed()) {
run = true;
countTime = 0;
totalTime = EEPROM.read(0) * 60;
digitalWrite(13, HIGH);
lastMillis = millis();
}
if (run) {
if (millis() - lastMillis >= 1000) {
countTime++;
int remainTime = totalTime - countTime;
minute = (int)(remainTime / 60);
second = remainTime % 60;
display.showNumberDec(second, true, 2, 2);
display.showNumberDecEx(minute, 0b11100000, true, 2, 0);
lastMillis = millis();
}
if (countTime == totalTime) {
digitalWrite(13, LOW);
run = false;
}
}
}
else if (mode == 1) {
if (millis() - lastMillis >= 400) {
blink = !blink;
lastMillis = millis();
}
if (blink) {
display.showNumberDec(minute, true, 2, 2);
}
else {
display.clear();
}
if (startButton.isPressed()) minute++;
if (stopButton.isPressed()) minute--;
if (menuButton.isPressed()) {
EEPROM.write(0, minute);
display.showNumberDecEx(0, 0b11100000, true, 4, 0);
mode = 0;
}
}
}