Table Tennis Score Board



This is a 3 buttons control table-tennis score board, 1st player, 2nd player and reset.
You will need :
X3 220ohm resistors
X3 Push Buttons
X1 Dual (8 digits) max7291 7-segment display
an Arduino, the diagram shows UNO but i only used it at the planning level, afterword i changed to pro-Micro
Some Cables.
It Is Simple

The program increase each player score every time the player button is pushed.
if eather of the player reached 11 points and the score differents is bigger then 2 then the game counter is increased and a new match begins.
Code....
#define MAX7219_DIN 5
#define MAX7219_CS 6 #define MAX7219_CLK 7
#define leftB 8 #define rightB 9 #define RESETb 10
int left, right, rightPlay, leftPlay = 0; boolean changeIndc = false; int SRead;
void initialise() { digitalWrite(MAX7219_CS, HIGH); pinMode(MAX7219_DIN, OUTPUT); pinMode(MAX7219_CS, OUTPUT); pinMode(MAX7219_CLK, OUTPUT); }
void output(byte address, byte data) { digitalWrite(MAX7219_CS, LOW); shiftOut(MAX7219_DIN, MAX7219_CLK, MSBFIRST, address); shiftOut(MAX7219_DIN, MAX7219_CLK, MSBFIRST, data); digitalWrite(MAX7219_CS, HIGH); }
void setup() { Serial.begin (9600); pinMode (leftB, INPUT); pinMode (rightB, INPUT); // put your setup code here, to run once: initialise(); output(0x0f, 0x00); //display test register - test mode off output(0x0c, 0x01); //shutdown register - normal operation output(0x0b, 0x07); //scan limit register - display digits 0 thru 7 output(0x0a, 0x0f); //intensity register - max brightness output(0x09, 0xff); //decode mode register - CodeB decode all digits output(0x08, 0x00); //digit 7 (leftmost digit) data output(0x07, 0x0a); output(0x06, 0x00); output(0x05, 0x00); output(0x04, 0x00); output(0x03, 0x00); output(0x02, 0x0a); output(0x01, 0x00); //digit 0 (rightmost digit) data
}
void loop() { SRead = Serial.read (); if (SRead ==48 || digitalRead (RESETb)) { Serial.println ("RESET"); left = 0; right = 0; leftPlay = 0; rightPlay = 0; changeIndc = true; output (0x01, 0); output (0x08, 0); } if (SRead == 49 || digitalRead (leftB)) { delay (200); while (digitalRead (leftB)) {} left++; changeIndc = true; } if (SRead == 50 || digitalRead (rightB)) { delay (200); while (digitalRead (rightB)) {} right++; changeIndc = true; } if (changeIndc) { output(0x03, left % 10); output(0x04, left / 10); output(0x05, right % 10); output(0x06, right / 10); if (right >=11 && right >= left +2) { rightPlay ++; right = 0; left = 0; output (0x08, rightPlay); } if (left >=11 && left >= right + 2) { leftPlay ++; right = 0; left = 0; output (0x01, leftPlay); } changeIndc = false; }
}