#include "SevSeg.h"
SevSeg sDisp;
int time, hours, minutes;
byte OB1, OB2, NB1, NB2, NM, OM, SM;
void setup() {
pinMode(A5, INPUT);
pinMode(A4, INPUT);
pinMode(A3, INPUT);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
byte numDigits = 4;
byte digitPins[] = {2, 3, 4, 5};
byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13};
bool resistorsOnSegments = false;
byte hardwareConfig = COMMON_ANODE;
bool updateWithDelays = false;
bool leadingZeros = true;
bool disableDecPoint = false;
sDisp.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments,
updateWithDelays, leadingZeros, disableDecPoint);
}
void loop() {
delay(1);
while(!digitalRead(A5) && !digitalRead(A4) && !digitalRead(A3)) {
if (millis() % 60000 == 0) {
delay(1);
minutes = minutes + 1;
if (minutes >= 60) {
minutes = 0;
hours = hours + 1;
if (hours >= 24) {
hours = 0;
minutes = 0;
}
}
}
dispTime();
}
delay(1);
NM = digitalRead(A3);
if (NM && !OM) {
if (SM == 0) {
SM = 1;
digitalWrite(1, HIGH);
}
else {
SM = 0;
digitalWrite(1, LOW);
}
OM = 1;
}
else if (!NM && OM) {
OM = 0;
}
if (SM == 0) {
NB1 = digitalRead(A5);
if (NB1 && !OB1) {
OB1 = 1;
minutes = minutes + 1;
if (minutes >= 60) {
minutes = 0;
}
dispTime();
}
else if (!NB1 && OB1) {
OB1 = 0;
}
NB2 = digitalRead(A4);
if (NB2 && !OB2) {
OB2 = 1;
minutes = minutes - 1;
if (minutes < 0) {
minutes = 59;
}
dispTime();
}
else if (!NB2 && OB2) {
OB2 = 0;
}
}
else {
NB1 = digitalRead(A5);
if (NB1 && !OB1) {
OB1 = 1;
hours = hours + 1;
if (hours >= 24) {
hours = 0;
}
dispTime();
}
else if (!NB1 && OB1) {
OB1 = 0;
}
NB2 = digitalRead(A4);
if (NB2 && !OB2) {
OB2 = 1;
hours = hours - 1;
if (hours < 0) {
hours = 23;
}
dispTime();
}
else if (!NB2 && OB2) {
OB2 = 0;
}
}
}
void dispTime() {
time = hours * 100;
time = time + minutes;
sDisp.setNumber(time, 2);
sDisp.refreshDisplay();
}