#include "SevSeg.h"
SevSeg sevseg;
int counter = 0;
unsigned long timer = 0;
bool start_stop = false;
bool start_stop_two = false;
int button_start = 9;
int button_two_start = 10;
int button_reset = 11;
int last_button_start = LOW;
int cur_button_start = LOW;
int last_button_two_start = LOW;
int cur_button_two_start = LOW;
int last_button_reset = LOW;
int cur_button_reset = LOW;
int plusminus = 13;
int adjust = 1;
int negative = 1;
unsigned long t1 = 0;
void setup() {
byte numDigits = 1;
byte digitPins[] = {};
byte segmentPins[] = {2, 3, 4, 5, 6, 7, 8};
bool resistorsOnSegments = true;
pinMode(button_start, INPUT);
digitalWrite(button_start, HIGH);
pinMode(button_two_start, INPUT);
digitalWrite(button_two_start, HIGH);
byte hardwareConfig = COMMON_CATHODE;
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
sevseg.setBrightness(90);
Serial.begin(9600);
}
int debounce(int last, int button_port)
{
int current = digitalRead(button_port);
if (last != current)
{
delay(10);
current = digitalRead(button_port);
}
return current;
}
void loop() {
cur_button_start = debounce(last_button_start, button_start);
delay(10);
cur_button_two_start = debounce(last_button_two_start, button_two_start);
if (last_button_start == HIGH && cur_button_start == LOW && last_button_two_start == HIGH && cur_button_two_start == HIGH)
{
if (start_stop)
{
start_stop = false;
}
else
{
start_stop = true;
start_stop_two = false;
}
}
if (last_button_start == HIGH && cur_button_start == HIGH && last_button_two_start == HIGH && cur_button_two_start == LOW)
{
if (start_stop_two)
{
start_stop_two = false;
}
else
{
start_stop = false;
start_stop_two = true;
if(counter == 0) {
counter = 10;
}
}
}
last_button_start = cur_button_start;
last_button_two_start = cur_button_two_start;
if (start_stop)
{
if ( counter < 10)
{
if ( millis() - timer >= 1000)
{
timer = timer + 1000;
counter = counter + 1;
send_display();
}
}
if ( counter == 10)
{
counter = 0;
timer = millis();
sevseg.setNumber(0, 0);
adjust = 0;
start_stop = !start_stop;
}
}
else if (start_stop_two)
{
if ( counter > 0)
{
if ( millis() - timer >= 1000)
{
timer = timer + 1000;
counter = counter - 1;
send_display();
}
}
if ( counter == 0)
{
counter = 10;
timer = millis();
sevseg.setNumber(0, 0);
adjust = 0;
start_stop_two = !start_stop_two;
}
}
else
{
timer = millis();
cur_button_reset = debounce(last_button_reset, button_reset);
if (last_button_reset == HIGH && cur_button_reset == LOW)
{
counter = 0;
timer = millis();
sevseg.setNumber(0, 0);
adjust = 1;
digitalWrite(plusminus, HIGH);
}
last_button_reset = cur_button_reset;
}
sevseg.refreshDisplay(); // Must run repeatedly
}
void send_display()
{
if (counter < 10)
{
sevseg.setNumber(counter, 0);
}
sevseg.refreshDisplay();
}