#include "SevSeg.h"
#include "Button.h"
SevSeg sevseg; //Instantiate a seven segment controller object
// declare buttons
Button thirtySecButton(A0);
Button fifteenSecButton(A1);
Button topButton(A2);
enum Mode {
countdown30,
countdown15,
stopped,
timeOut,
};
Mode mode = timeOut;
void setup() {
// setup display
byte numDigits = 4;
byte digitPins[] = {2, 3, 4, 5};
byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13};
bool resistorsOnSegments = false; // 'false' means resistors are on digit pins
byte hardwareConfig = COMMON_ANODE; // See README.md for options
bool updateWithDelays = false; // Default 'false' is Recommended
bool leadingZeros = false; // Use 'true' if you'd like to keep the leading zeros
bool disableDecPoint = false; // Use 'true' if your decimal point doesn't exist or isn't connected
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments,
updateWithDelays, leadingZeros, disableDecPoint);
sevseg.setBrightness(90);
//setup buttons
thirtySecButton.begin();
fifteenSecButton.begin();
topButton.begin();
Serial.begin(9600);
}
void loop() {
static unsigned long timer = millis();
static int currentDisplayTime = 0;
bool displayOff = false;
if(thirtySecButton.pressed()) {
timer = millis();
currentDisplayTime = 300;
mode = countdown30;
}
if(fifteenSecButton.pressed()) {
timer = millis();
currentDisplayTime = 150;
mode = countdown15;
}
if(topButton.pressed()) {
switch (mode) {
case countdown30:
mode = stopped;
break;
case countdown15:
currentDisplayTime = 150;
break;
}
}
if(mode == stopped) {
// toggle display "blink" not sure how you would do it, this doesn't work
// sevseg.setBrightness(displayOff ? 90 : 0);
// delay(300);
}
else if((millis() - timer >= 100)) {
if(currentDisplayTime > 0) {
timer += 100;
sevseg.setNumber(currentDisplayTime, 1);
currentDisplayTime -= 1;
}
else {
sevseg.setNumber(00, 1);
mode = timeOut;
}
}
sevseg.refreshDisplay(); // Must run repeatedly
}