#include "SevSeg.h"
SevSeg sevseg;
#define ac A0
#define usb A1
#define down A2
#define set A3
#define up A4
byte numDigits = 4;
byte digitPins[] = {2, 3, 4, 5}; //Digits: 1,2,3,4
byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13}; //Segments: A,B,C,D,E,F,G,DP
unsigned long timeNow;
bool flip, dash = true, runTimer;
int mode, t1, t2;
int timeDiv = 1; // 1 = min:sec ; 60 = hour:min
char timer[6];
void setup() {
Serial.begin(9600);
sevseg.begin(1, numDigits, digitPins, segmentPins, 1, 0, 1, 0); // 3
pinMode(up, INPUT_PULLUP);
pinMode(set, INPUT_PULLUP);
pinMode(down, INPUT_PULLUP);
pinMode(usb, OUTPUT);
pinMode(ac, OUTPUT);
}
void loop() {
if(!mode){
sevseg.setChars("----");
sevseg.refreshDisplay();
delay(250);
}
if(!digitalRead(set)){
if(dash){
mode += 1;
if(mode > 2) mode = 0;
Serial.print("Mode : ");
Serial.println(mode);
delay(500);
}
else{
Serial.println("Timer Start");
runTimer = true;
}
}
if(mode){
if(!digitalRead(up)){
dash = false;
t2 += 5;
if(t2 >= 60) {
t2 = 0;
t1 += 1;
}
sprintf(timer, "%02d.%02d", t1, t2);
Serial.println(timer);
delay(250);
}
if(!digitalRead(down)){
dash = false;
t2 -= 5;
if(t2 <= 0) {
t2 = 60;
t1 -= 1;
if(t1 < 0) t1 = 0;
}
sprintf(timer, "%02d.%02d", t1, t2);
Serial.println(timer);
delay(250);
}
if(dash) blink(mode);
else sevseg.setChars(timer);
sevseg.refreshDisplay();
}
while(runTimer){
if(mode == 1) digitalWrite(ac,1);
if(mode == 2) digitalWrite(usb,1);
if(millis() - timeNow >= timeDiv*1000){
timeNow = millis();
t2 -= 1;
if(t2 <= 0 && t1 > 0) {
t2 = 60;
t1 -= 1;
}
if(t2 <= 0 && t1 <= 0){
Serial.println("Times up!");
if(mode == 1) digitalWrite(ac,0);
if(mode == 2) digitalWrite(usb,0);
mode = 0;
dash = true;
runTimer = false;
}
sprintf(timer, "%02d.%02d", t1, t2);
sevseg.setChars(timer);
}
sevseg.refreshDisplay();
}
}
void blink(int num){
if(millis() - timeNow >= 500){
timeNow = millis();
flip = !flip;
if(flip) {
if(num == 1) sevseg.setChars("AC");
if(num == 2) sevseg.setChars("USB");
}
else
sevseg.blank();
}
}