Maker Pro
Maker Pro

Badminton Scoreboard Build

Hi,
I am building a scoreboard for my friend's badminton court. So i am planning of using Arduino Uno as the projects brain. I found a working code in internet, which is as follows.

Code
[mod edit: placed code within CODE tags to improve readability]

Code:
// Button Inputs
const int p1IncPIN=5, p1DecPIN=6, p2IncPIN=7, p2DecPIN=8;
// variable for reading the button status
int p1IncButton=0, p1DecButton=0, p2IncButton=0, p2DecButton=0;
// Video Outputs and Video Data
const int ledClockPIN=10; // to pin 10 on J1 (CLK_IN)
const int ledDataPIN=9;   // to pin 9 on J1 (DATA_IN)
const int ledLatchPIN=3;  // to pin 7 on J1 (DIMM_IN)
// Display Digit HEX Code {0-9} for Sure Electronics 12v 2-Panel 7-Segment Board
static byte displayDigit[10] = {
    0x3f, // 0
    0x06, // 1
    0x5b, // 2
    0x4f, // 3
    0x66, // 4
    0x6d, // 5
    0x7d, // 6
    0x07, // 7
    0x7f, // 8
    0x6f  // 9
  };
//set hex variable initial value
int p2_Ones=0, p2_Tens=0, p1_Ones=0, p1_Tens=0;
// set the variables for the score
int player1Score = 0, player2Score = 0;
// previous state of each button declaration
int p1IncLastButtonState = 0;
int p1DecLastButtonState = 0;
int p2IncLastButtonState = 0;
int p2DecLastButtonState = 0;

void setup(){
  // initialize the pushbutton pin as an input:
  pinMode(p1IncPIN, INPUT);
  pinMode(p1DecPIN, INPUT);
  pinMode(p2IncPIN, INPUT);
  pinMode(p2DecPIN, INPUT);

  // Set the Display Pins as outputs
  pinMode(ledLatchPIN, OUTPUT);//Latch
  pinMode(ledClockPIN, OUTPUT);//Clock
  pinMode(ledDataPIN, OUTPUT);//Data
  digitalWrite(ledLatchPIN, HIGH);
  // Initialize the display to reflect the beginning score before running loop()
  initDisplay();
}

void loop() {
  //read the Button Pins to see if one of them has been pressed
  p1IncButton = digitalRead(p1IncPIN);
  p1DecButton = digitalRead(p1DecPIN);
  p2IncButton = digitalRead(p2IncPIN);
  p2DecButton = digitalRead(p2DecPIN);

  //read the Button Pins to see if one of them has been pressed
if (p1IncButton != p1IncLastButtonState) {
    // if the state has changed, increment the counter 
    if (p1IncButton == HIGH){
      if (player1Score != 21) player1Score++;
    }
  }

  if (p1DecButton != p1DecLastButtonState) {
    // if the state has changed, increment the counter 
    if (p1DecButton == HIGH){
      if (player1Score != 0) player1Score--;
    }
  }

  if (p2IncButton != p2IncLastButtonState) {
    // if the state has changed, increment the counter 
    if (p2IncButton == HIGH){
      if (player2Score != 21) player2Score++;
    }
  }

  if (p2DecButton != p2DecLastButtonState) {
    // if the state has changed, increment the counter 
    if (p2DecButton == HIGH){
      if (player2Score != 0) player2Score--;
    }
  }

  // Check to see if both increment buttons are high - this will reset the score back to 0-0
  if (p1IncButton == HIGH && p2IncButton == HIGH) {
    initDisplay();
      // set the variables for the score at the beginning of the game
    player1Score = 0, player2Score = 0;
 
  }
  // save the current state as the last state for next time through the loop
  p1IncLastButtonState = p1IncButton;
  p1DecLastButtonState = p1DecButton;
  p2IncLastButtonState = p2IncButton;
  p2DecLastButtonState = p2DecButton;

  delay(50);
  scoreUpdate();
}

void scoreUpdate() {
  // this is used after a button is pressed to update the players score in integer form
  // needed to break down the score to pass info to the screen
  if (player1Score < 10) {
    p1_Tens = 0;
    p1_Ones = player1Score;
  }
  else if (player1Score > 9 && player1Score < 20) {
    p1_Tens = 1;
    p1_Ones = player1Score-10;
  }
  else if (player1Score > 19) {
    p1_Tens = 2;
    p1_Ones = player1Score-20;
  }

  if (player2Score < 10) {
    p2_Tens = 0;
    p2_Ones = player2Score;
  }
  else if (player2Score > 9 && player2Score < 20) {
    p2_Tens = 1;
    p2_Ones = player2Score-10;
  }
  else if (player2Score > 19) {
    p2_Tens = 2;
    p2_Ones = player2Score-20;
  }

  // call the scoreToHex function and pass the score variables
  updateLED();
}

void updateLED() { // update the LEDs based upon the information passed from scoreToHex
  digitalWrite(ledLatchPIN, HIGH);
  shiftOut(ledDataPIN, ledClockPIN, MSBFIRST, displayDigit[p2_Ones]);//(datapin, clockpin, data) for Right Panel digit 1 - Player 2 Ones

  if (p2_Tens>0) {
    shiftOut(ledDataPIN, ledClockPIN, MSBFIRST, displayDigit[p2_Tens]);//(datapin, clockpin, data) for Right Panel digit 2 - Player 2 Tens
  }
  else {
    shiftOut(ledDataPIN, ledClockPIN, MSBFIRST, 0);//(datapin, clockpin, data) for Right Panel digit 2 - Player 2 Tens
  } 

  shiftOut(ledDataPIN, ledClockPIN, MSBFIRST, displayDigit[p1_Ones]);//(datapin, clockpin, data) for Left Panel digit 1 - Player 1 Ones

  if (p1_Tens>0) {
    shiftOut(ledDataPIN, ledClockPIN, MSBFIRST, displayDigit[p1_Tens]);//(datapin, clockpin, data) for Right Panel digit 2 - Player 2 Tens
  }
  else {
    shiftOut(ledDataPIN, ledClockPIN, MSBFIRST, 0);//(datapin, clockpin, data) for Right Panel digit 2 - Player 2 Tens
  }   

  digitalWrite(ledLatchPIN, LOW);

}

//Initialize the display to show zero's in the one's column
void initDisplay() {
  digitalWrite(ledLatchPIN, HIGH);
  shiftOut(ledDataPIN, ledClockPIN, MSBFIRST, 0x3f);//(datapin, clockpin, data) for Right Panel digit 1 - Player 2 Ones
  shiftOut(ledDataPIN, ledClockPIN, MSBFIRST, 0);//(datapin, clockpin, data) for Right Panel digit 2 - Player 2 Tens
  shiftOut(ledDataPIN, ledClockPIN, MSBFIRST, 0x3f);//(datapin, clockpin, data) for Left Panel digit 1 - Player 1 Ones
  shiftOut(ledDataPIN, ledClockPIN, MSBFIRST, 0);//(datapin, clockpin, data) for Right Panel digit 2 - Player 2 Tens
  digitalWrite(ledLatchPIN, LOW);
}

Reference Forum link : http://forum.arduino.cc/index.php?topic=214857.0
Reference Video Link :

Question:

I can't find any schematic for this project, anyone please design me a circuit. Thanks in advance.
 
Last edited by a moderator:

Harald Kapp

Moderator
Moderator
When you follow the link from youtube to the arduino forum's entry for this project, you'll find teh schematic in post #6.
The first information on tha thread is that he's
Using the SURE Electronics 2.3" 2 Digit 7-Segment LED Display Board (DE-DP22811). It is being powered by the test board that comes with the 4 Digit board.
 
pradoartz
Where did you get the type face? It is smaller than the standard used here but I find it much more readable.
Thank you
 

Harald Kapp

Moderator
Moderator
pradoartz
Where did you get the type face? It is smaller than the standard used here but I find it much more readable.
Thank you

Times New Roman? Have you noticed the font select button in th etop row of a post (#6 from left)?
 
Top