#include "SevSegShift.h"
#define SHIFT_PIN_DS 8
#define SHIFT_PIN_STCP 7
#define SHIFT_PIN_SHCP 6
#define TIME_PRESSED_BUTTON 200
#define COUNT_BUTTON_PIN 13
#define START_BUTTON_PIN 12
long lastTimeChecked = 0;
long timer = 0;
int total_count = 0;
bool timer_finished = false;
SevSegShift sevseg(SHIFT_PIN_DS, SHIFT_PIN_SHCP, SHIFT_PIN_STCP); // Instantiate a seven segment controller object
void setup() {
byte numDigits = 2;
byte digitPins[] = {8+2, 8+5}; // of ShiftRegister(s) | 8+x (2nd Register)
byte segmentPins[] = {8+3, 8+7, 4, 6, 7, 8+4, 3, 5}; // of Shiftregister(s) | 8+x (2nd Register)
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 = true; // Use 'true' if you'd like to keep the leading zeros
bool disableDecPoint = true; // 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);
}
void loop() {
count_increase();
if (digitalRead(START_BUTTON_PIN) == HIGH){
start_timer();
timer_finished = false;
}
sevseg.refreshDisplay();
}
void start_timer(){
// countdown timer loop
sevseg.setNumber(total_count, 0);
timer = millis();
while (not(timer_finished)){
if (millis() - timer >= 1000){
timer = millis();
if (total_count == 0){
timer_finished = true;
}
else{
total_count--;
sevseg.setNumber(total_count, 0);
}
}
sevseg.refreshDisplay();
}
}
void count_increase(){
while (digitalRead(COUNT_BUTTON_PIN) == HIGH){
if (millis() - lastTimeChecked >= TIME_PRESSED_BUTTON){
lastTimeChecked = millis();
if (total_count >= 60){
total_count = 0;
}
else{
total_count++;
}
}
sevseg.setNumber(total_count, 0);
sevseg.refreshDisplay();
}
lastTimeChecked = 0;
}