Arcade Collecting > Miscellaneous Arcade Talk

Skee Ball Scoring System

(1/1)

wsand90:
I have built a skee ball game for my church youth group and I need some help on the scoring electronics.  I have read several posts and I still do not have a scoring system that works.  I am using the classic 7 hole scoring system.  Two holes are 100 points, one hole is 50 points, one hole is 40 points, one hole is 30 points, one hole is 20 points and one hole is 10 points.  I have installed the original type micro switches at the hole exits.  I am going with a single player setup with a score reset after game completion.  I am using an Arduino 2560 micro controller, 20x4 LCD and three Max 7219 matrices in series (display) for the scoring system.  I have attached the schematic in a pdf format and the Arduino code in a Word format.  The schematic only displays one Max 7219.  When using the game, I get the last Max 7219 to display a zero and when any ball switch is actuated, the zero gets a momentary line down the center.  Any help is appreciated.  It appears the code did not upload. 

The following is my code:

/////////////////////////////////////////////
      //    This Sketch is for                   //
     //      Skee                               //   
    //       Ball                              //
   //        Game                             //
  /////////////////////////////////////////////
                                            //include all libraries
 #include <LiquidCrystal.h>
 #include <MaxMatrix.h>
 #include <avr/pgmspace.h>
                                         //assigned micro controller pins to 7 Micro Switches
 int Micro_Switch1= 22;                 // for 10 score switch
 int Micro_Switch2= 24;                // for 20 score switch
 int Micro_Switch3= 26;               // for 30 score switch
 int Micro_Switch4= 28;              // for 40 score switch
 int Micro_Switch5= 30;             // for 50 score switch
 int Micro_Switch6= 32;            // for 100 score switch
 int Micro_Switch7= 34;           // for 100 score switch
 int Reset_Button = 6;           //  reset Button         
                                // defined MAX7219 module pins
int DIN = 48;                  // DIN pin of MAX7219 module
int CS = 50;                  // CS pin of MAX7219 module
int CLK = 52;                // CLK pin of MAX7219 module
int maxInUse = 3;           // define No. of modules
MaxMatrix m(DIN, CS, CLK, maxInUse);
                                               // initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
int Score_Count =0;                          // Variable to store score values
 
void setup() {
                                          // put your setup code here, to run once:
  m.init();                              // module initialize
  m.setIntensity(10);                   // dot matix intensity 0-15
  m.clear();                           // Clears the display
Serial.begin(9600);
 lcd.begin(20,4);                     // set up the LCD's number of columns and rows:
  pinMode(Micro_Switch1,INPUT);
   pinMode(Micro_Switch2,INPUT);
    pinMode(Micro_Switch3,INPUT);
     pinMode(Micro_Switch4,INPUT);
      pinMode(Micro_Switch5,INPUT);
       pinMode(Micro_Switch6,INPUT);
        pinMode(Micro_Switch7,INPUT);
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Skee Ball Game");
        lcd.setCursor(0,1);
        lcd.print("Player Score");
        lcd.setCursor(0,2);

}

void loop() {
                            // put your main code here, to run repeatedly:
     const byte NUM_0[]={                                                    // 0
                  4, 8,
                  B00111110,
                  B01000001,
                  B01000001,
                  B00111110,
                  B00000000,
                 };
     
     
     const byte NUM_1[]={                                                    // 1
                 4, 8,
                 B01000010,
                 B01111111,
                 B01000000,
                 B00000000,
                 B00000000,
                 };
                 
     const byte NUM_2[]={                                              // 2
                 4, 8,
                 B01100010,
                 B01010001,
                 B01001001,
                 B01000110,
                 B00000000,
                };
               
      const byte NUM_3[]={                                          // 3
                4, 8,
                B00100010,
                B01000001,
                B01001001,
                B00110110,
                B00000000,
                };
 
       const byte NUM_4[]={                                          // 4
                4, 8,
                B00011000,
                B00010100,
                B00010010,
                B01111111,
                B00000000,
                };
               
       const byte NUM_5[]={                                  //5                       
               4, 8,
               B00100111,
               B01000101,
               B01000101,
               B00111001,
               B00000000,
               };
     const byte NUM_6[]={                             // 6
               4, 8,
               B00111110,
               B01001001,
               B01001001,
               B00110000,
               B00000000,                 
      };
 
      const byte NUM_7[]={                        // 7
               4, 8,
               B01100001,
               B00010001,
               B00001001,
               B00000111,
               B00000000,
     };
       const byte NUM_8[]={                    // 8
               4, 8,
               B00110110,
               B01001001,
               B01001001,
               B00110110,
               B00000000,
       };
       
       const byte NUM_9[]={                 // 9
               4, 8,
               B00000110,
               B01001001,
               B01001001,
               B00111110,
               B00000000,
     };
     
                if(digitalRead(Reset_Button) == HIGH)
               {
                Score_Count = 0;
                lcd.print(Score_Count);
                m.clear();                 // Clears the display
                m.writeSprite(2, 0, NUM_0);
               }
               if(digitalRead(Micro_Switch1) == LOW)
               {
                Score_Count = 10+Score_Count;
                lcd.print(Score_Count);
                m.writeSprite(2, 0, NUM_1);
                m.writeSprite(2, 0, NUM_0);             
               }
                              if(digitalRead(Micro_Switch2) == LOW)
               {
                Score_Count = 20+Score_Count;
                lcd.print(Score_Count);
                m.writeSprite(2, 0, NUM_2);
                m.writeSprite(2, 0, NUM_0);             
               }
                              if(digitalRead(Micro_Switch3) == LOW)
               {
                Score_Count = 30+Score_Count;
                lcd.print(Score_Count);
                m.writeSprite(2, 0, NUM_3);
                m.writeSprite(2, 0, NUM_0);               
               }
                              if(digitalRead(Micro_Switch4) == LOW)
               {
                Score_Count = 40+Score_Count;
                lcd.print(Score_Count);
                m.writeSprite(2, 0, NUM_4);
                m.writeSprite(2, 0, NUM_0);               
               }
                              if(digitalRead(Micro_Switch5) == LOW)
               {
                Score_Count = 50+Score_Count;
                lcd.print(Score_Count);
                m.writeSprite(2, 0, NUM_5);
                m.writeSprite(2, 0, NUM_0);
               
               }
                              if(digitalRead(Micro_Switch6) == LOW)
               {
                Score_Count = 100+Score_Count;
                lcd.print(Score_Count);
                m.writeSprite(2, 0, NUM_1);
                m.writeSprite(2, 0, NUM_0);
                m.writeSprite(2, 0, NUM_0);
               
               }
                              if(digitalRead(Micro_Switch7) == LOW)
               {
                Score_Count = 100+Score_Count;
                lcd.print(Score_Count);
                m.writeSprite(2, 0, NUM_1);
                m.writeSprite(2, 0, NUM_0);
                m.writeSprite(2, 0, NUM_0);
               
               }
}

pdco_arcade:
Hi wsand90,

We you able to get you scoring system operating as you wanted it to?

lilshawn:
all y'all way over complicating this bro.

if you look at the original skeeball tracks, the center stack all share a chute with 5 switches and every switch actuation scores 10 points. so if you toss it in 30, it rolls down 3 of the 5 total switches, (scoring 30 points total) you toss it in 10 points... it rolls over 1 switch... etc

the corners that score "100" points each have a switch that scores 50 points... then roll down the center chute (going over the 5 center stack switches as well scoring 50 points. (50+10+10+10+10+10)

2 inputs, one programmed to set the scoring 10 points per actuation the other to set the scoring 50.

EZPZ

pdco_arcade:
I agree with what you say.

I think depends on the Skee-Ball implementation desired.  If is like traditional play then that original method of scoring is good.  If additional game types are desired then would be useful to detect a ball into each hole.  Some folks on this site have described a game where a hole is illuminated via LED and extra points are awarded if a ball enters that specific hole while illuminated.  For this type of game the traditional scoring method would not work so well.

lilshawn:
dont try to complicate with hardware, what can easily be programmed in software.

light up 30... then if switch presses over a 1500ms sample = 3 then add 100 bonus points... otherwise, score regular points.

 :dunno

Navigation

[0] Message Index

Go to full version