#include <TM1637Display.h>
#define RELAY A5
#define SW_START A4
#define SW_SEC A2
#define SW_MIN A1
#define CLK A3
#define DIO 3
TM1637Display seg7display(CLK, DIO);
uint8_t setMin = 0, setSec = 0; // uint8_t เก็บค่าได้ 0 to 255
uint16_t totalSeconds = 0, timeInt;
bool startFlag = 0;
#define SET_TIME_INT ((setMin*100)*setSec)
void calculateTotalSeconds(void){
totalSeconds = (setMin*60)+setSec;
}
void secondsToTimeInt(void){
uint8_t min_loc=0,sec_loc=0;
min_loc = (int)totalSeconds/60;
sec_loc = (int)totalSeconds%60;
timeInt = ((min_loc*100)+sec_loc);
seg7display.showNumberDecEx(timeInt, 0x40, true, 4, 0);
}
//================
ISR(TIMER1_COMPA_vect){
if(startFlag>0){
if(totalSeconds>0)totalSeconds--;
else{startFlag=0; digitalWrite(RELAY, HIGH);
}
}
//================
void setup(){
pinMode(RELAY, OUTPUT);
pinMode(SW_START, INPUT);
pinMode(SW_SEC, INPUT);
pinMode(SW_MIN, INPUT);
delay(400);
digitalWrite(RELAY, HIGH);
seg7display.setBrightness (0x0f);
seg7display.showNumberDecEx(SET_TIME_INT, 0x40, true, 4, 0);
//================
// Setup Timer Interrupt for 1 second
//================
cli(); //turn off all interrupts
TCCR1A = 0; //time counter control
TCCR1B = 0;
OCR1A = 0xF424; //output compare register
TCCR1B = (1<<WGM12) | (1<<CS12);
TIMSK1 = (1<<OCIE1A);
sei(); //enable global interrupts
//================
}