// Arduino Pins
const int dataPin = 2;
const int clockPin = 3;
const int latchPin = 4;
const int btnHomeScore = 5;
const int btnAwayScore = 7;
const int btnHomeFoul = 6;
const int btnAwayFoul = 8;
const int btnShift = 9;
const byte digitPatterns[10] = {
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111 // 9
};
int valBtnHomeScore = 1;
int valBtnAwayScore = 1;
int valBtnHomeFoul = 1;
int valBtnAwayFoul = 1;
int scorePlayerH = 0;
int scorePlayerA = 0;
int scorePlayerHF = 0;
int digitA1 = 0;
int digitA2 = 0;
int digitA3 = 0;
int digitH1 = 0;
int digitH2 = 0;
int digitH3 = 0;
int digitHF = 0;
void setup() {
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(btnHomeScore, INPUT);
pinMode(btnAwayScore, INPUT);
pinMode(btnHomeFoul, INPUT);
pinMode(btnAwayFoul, INPUT);
pinMode(btnShift, INPUT);
displayScore();
}
void loop() {
readButtons();
if (valBtnHomeScore == 0) {
scorePlayerH += 1;
if (scorePlayerH >= 200) { scorePlayerH = 199; }
displayScore();
while (valBtnHomeScore == 0) {
delay(100);
readButtons();
}
}
if (valBtnAwayScore == 0) {
scorePlayerA += 1;
if (scorePlayerA >= 200) { scorePlayerA = 199; }
displayScore();
while (valBtnAwayScore == 0) {
delay(100);
readButtons();
}
}
}
void displayScore() {
digitH3 = (scorePlayerH % 10) / 1;
digitH2 = (scorePlayerH % 100) / 10;
digitH1 = (scorePlayerH % 1000) / 100;
digitA3 = (scorePlayerA % 10) / 1;
digitA2 = (scorePlayerA % 100) / 10;
digitA1 = (scorePlayerA % 1000) / 100;
digitHF = (scorePlayerHF % 10) / 1;
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, digitPatterns[digitHF]); // Player B Thousands
shiftOut(dataPin, clockPin, MSBFIRST, digitPatterns[digitA3]); // Player B Thousands
shiftOut(dataPin, clockPin, MSBFIRST, digitPatterns[digitA2]); // Player B Hundreds
shiftOut(dataPin, clockPin, MSBFIRST, digitPatterns[digitA1]); // Player B Tens
shiftOut(dataPin, clockPin, MSBFIRST, digitPatterns[digitH3]); // Player A Thousands
shiftOut(dataPin, clockPin, MSBFIRST, digitPatterns[digitH2]); // Player A Hundreds
shiftOut(dataPin, clockPin, MSBFIRST, digitPatterns[digitH1]); // Player A Tens
digitalWrite(latchPin, HIGH);
}
void readButtons() {
valBtnHomeScore = digitalRead(btnHomeScore);
valBtnAwayScore = digitalRead(btnAwayScore);
}