int SegmentScore1 = 0;
int SegmentScore2 = 0;
const int SER_Pin = 10;
const int SRCLK_Pin = 9;
const int RCLK_Pin = 8;
const int SER_Pin1 = 13;
const int SRCLK_Pin1 = 12;
const int RCLK_Pin1 = 11;
const byte digitMap[] = {
0x40,
0x79,
0x24,
0x30,
0x19,
0x12,
0x02,
0x78,
0x00,
0x10,
};
unsigned long gameStartTime;
bool gameStarted = false;
unsigned long startTime = 0;
unsigned long scoreResetTime = 0;
void setup() {
DDRD = 0b01111111;
DDRC = 0b001111;
DDRB = 0b111111;
SegmentScore1 = 0;
SegmentScore2 = 0;
}
void displayDigit(int digit) {
PORTD = digitMap[digit];
}
void displayTime(unsigned long time) {
int minutes = time / 60000;
int seconds = (time / 1000) % 60;
displayDigit(digitMap[11]);
PORTC = 0b100000;
displayDigit(minutes);
PORTC |= 0b000010;
delay(5);
PORTC ^= 0b000010;
displayDigit(seconds / 10);
PORTC |= 0b000100;
delay(5);
PORTC ^= 0b000100;
displayDigit(seconds % 10);
PORTC |= 0b001000;
delay(5);
PORTC ^= 0b001000;
displayDigit(minutes/10);
PORTC |= 0b000001;
delay(5);
PORTC ^= 0b000001;
}
void FX() {
if (startTime == 0) {
startTime = millis();
}
unsigned long currentTime = millis();
unsigned long elapsedTime = currentTime - startTime;
int vol = (PINC & (1 << 4));
int vol1 = (PIND & (1 << 7));
if (vol != 0 && vol1 != 0) {
displayTime(elapsedTime);
}
if (currentTime - scoreResetTime >= 20000) {
scoreResetTime = currentTime;
SegmentScore1 = 0;
SegmentScore2 = 0;
}
}
void loop() {
int vol = (PINC & (1 << 4));
int vol1 = (PIND & (1 << 7));
displayDigit1(SegmentScore1);
displayDigit2(SegmentScore2);
FX();
if (vol == 0) {
Serial.println(vol);
delay(500);
SegmentScore1++;
displayDigit1(SegmentScore1);
if (SegmentScore1 >= 10) {
SegmentScore2++;
displayDigit2(SegmentScore2);
SegmentScore1 = 0;
return;
}
}
else if (vol1 == 0) {
delay(500);
SegmentScore2++;
displayDigit2(SegmentScore2);
if (SegmentScore2 >= 10) {
SegmentScore1++;
displayDigit1(SegmentScore1);
SegmentScore2 = 0;
return;
}
}
unsigned long currentTime = millis();
if (currentTime - startTime >= 20000) {
startTime = currentTime;
}
}
void displayDigit1(int digit) {
shiftOut(SER_Pin, SRCLK_Pin, MSBFIRST, digitMap[digit]);
digitalWrite(RCLK_Pin, LOW);
digitalWrite(RCLK_Pin, HIGH);
}
void displayDigit2(int digit) {
shiftOut(SER_Pin1, SRCLK_Pin1, MSBFIRST, digitMap[digit]);
digitalWrite(RCLK_Pin1, LOW);
digitalWrite(RCLK_Pin1, HIGH);
}