Pong Final
PMike Sitkauskas '10
Ryan Deward '10
Alex Henderson '10
Brief Description
We made the classic Atari game "Pong".
Description
We used 30 LED's as our screen and they are lined up in 5 rows and 6 columns. For our Pong paddles we have two lit up LEDs controlled by potentiometers. The ball is just one LED bouncing around the screen. Everytime the ball hits the paddle or sides of the screen, it makes a beeping noise. If the player's paddle doesn't line up with the ball then one light lights up on the oppenent's side. They keep lighting up until it reaches 7 points. The player who scores 7 points first wins. Their row will light up to indicate victory.
Pictures
The bottom of Pong
The top of Pong
Code
#include <Tone.h>
Tone noiseMaker;
int bobb = 0; //variable that declares
int score2 =0; // sets score as 0 n stuff
int score1 = 0; // sets score as 0 n stuff
int player2=0; // player 2 score n stuff
int player1=0; // player 1 score n stuff
int pace = 1000; // sets pace of ball n stuff
int time=0; // sets delay to 0 n stuff
int y = 0; // sets initial y value to 0 n stuff
int x=0; // sets initial x value to 0 n stuff
int xD=1; //sets x direction of ball
int yD=1; //sets y direction of ball
int minus[]={3,4,2,4,2,3,6,7,5,7,5,6,9,10,8,10,8,9,12,13,11,13,11,12,14,15,16,15,16,14}; // declares negatives of pins n stuff
int plus[]={4,3,4,2,3,2,7,6,7,5,6,5,10,9,10,8,9,8,13,12,13,11,12,11,15,14,15,16,14,16}; // declares positives of pins n stuff
int led; // declares LED n stuff
int val =0; // sets inital value to 0 n stuff
int val1=0; //sets inital value to 0 n stuff
int paddleminus1[]= {3,4,2,4,2,3}; //
int paddleplus1 []= {4,3,4,2,3,2}; //
int paddleminus2[]= {14,15,16,15,16,14}; //
int paddleplus2[] = {15,14,15,16,14,16}; //
int woot [5][6]= // declares n stuff
{
{0,1,2,3,4,5},
{6,7,8,9,10,11},
{12,13,14,15,16,17},
{18,19,20,21,22,23},
{24,25,26,27,28,29},
}; // Declares pins in arrays n stuff
void setup() // This is the setup n stuff
{
noiseMaker.begin(17); // makes noise n stuff
for (int pin=1; pin<18;pin++) // makes noise at a certain pin n stuff
{
pinMode(pin,INPUT); // sets pin as input n stuff
}
Serial.begin(9600); // makes it start n stuff
}
void loop() // this is the loop n stuff
{
led=woot[y][x]; //
for(time=0;time <= pace;time++) //
{
val = analogRead(4); //reads the potentiameter input
val1 = analogRead(5); //reads the potentiameter input
val = map(val,0,1023,0,5); //resets the values of the potentiameter to correspond to the lights
val1 = map(val1,0,1023,0,5); //resets the values of the potentiameter to correspond to the lights
pinMode(paddleplus1[val],OUTPUT); //sets the positive paddles as an output
pinMode(paddleminus1[val],OUTPUT); //sets the negative paddles as an output
digitalWrite(paddleplus1[val],HIGH); //sends which light to light up
digitalWrite(paddleminus1[val],LOW); //sends which light to light up
pinMode(paddleplus1[val],INPUT); //sets the paddles back to inputs
pinMode(paddleminus1[val],INPUT); //sets the paddles back to inputs
pinMode(paddleplus2[val1],OUTPUT); //same as paddle one
pinMode(paddleminus2[val1],OUTPUT); //same as paddle one
digitalWrite(paddleplus2[val1],HIGH); //same as paddle one
digitalWrite(paddleminus2[val1],LOW); //same as paddle one
pinMode(paddleplus2[val1],INPUT); //same as paddle one
pinMode(paddleminus2[val1],INPUT); //same as paddle one
pinMode(plus[led],OUTPUT); //sets the positive ball as an output
pinMode(minus[led],OUTPUT); //sets the negative ball as an output
digitalWrite(plus[led],HIGH); //sends which light to light up as the ball
digitalWrite(minus[led],LOW); //sends which light to light up as the ball
pinMode(plus[led],INPUT); //sets the ball back to input
pinMode(minus[led],INPUT); //sets the ball back to input
}
y=y+yD; // sets y = to y plus yD n stuff
x=x+xD; // sets x = to x plus xD n stuff
if(x>5) // if x value is greater than 5 n stuff
{xD=xD*(-1); // multiplies the x
x=4;
noiseMaker.play(400);
delay(50);
noiseMaker.stop();
// Sets X value to 4
}
if (x<0) //
{xD=xD*(-1); //
x=1;
noiseMaker.play(400);
delay(50);
noiseMaker.stop();
// Sets X value to 1
}
//left side
if (y == 0)
{
if(x==val || x==val+1)
{
yD=yD*(-1);
y=1;
pace=pace*.9;
noiseMaker.play(400);
delay(50);
noiseMaker.stop();
}
else
{delay(1000);
x=val1;
yD=yD*(-1);
y= 4;
pace=1000;
player2= player2+1;
for (int bobb=0; bobb<6000;bobb++)
for(int score2=0; score2<(player2);score2++)
{
pinMode(paddleplus2[score2],OUTPUT);
pinMode(paddleminus2[score2],OUTPUT);
digitalWrite(paddleplus2[score2],HIGH);
digitalWrite(paddleminus2[score2],LOW);
pinMode(paddleplus2[score2],INPUT);
pinMode(paddleminus2[score2],INPUT);
delayMicroseconds(10);
if (score2==6)
{
for (int x=0; x<6; x++)
{
led=woot[y][x];
pinMode(plus[led],OUTPUT);
pinMode(minus[led],OUTPUT);
digitalWrite(plus[led],HIGH);
digitalWrite(minus[led],LOW);
delay(500);
Serial.println(led);
pinMode(plus[led],INPUT);
pinMode(minus[led],INPUT);
}
}
}
}
}
//right side
if (y == 4)
{
if(x==val1 || x==val1+1)
{
yD=yD*(-1);
y=3;
pace=pace*.9;
noiseMaker.play(400);
delay(50);
noiseMaker.stop();
}
else
{delay(1000);
x=val;
y=0;
pace=1000;
player1= player1+1;
for (int bob=0; bob<6000;bob++)
for(int score1=0; score1<(player1);score1++)
{
pinMode(paddleplus1[score1],OUTPUT);
pinMode(paddleminus1[score1],OUTPUT);
digitalWrite(paddleplus1[score1],HIGH);
digitalWrite(paddleminus1[score1],LOW);
pinMode(paddleplus1[score1],INPUT);
pinMode(paddleminus1[score1],INPUT);
delayMicroseconds(10);
if (score1==6)
{
for (int x=0; x<6; x++)
{
led=woot[y][x];
pinMode(plus[led],OUTPUT);
pinMode(minus[led],OUTPUT);
digitalWrite(plus[led],HIGH);
digitalWrite(minus[led],LOW);
delay(500);
Serial.println(led);
pinMode(plus[led],INPUT);
pinMode(minus[led],INPUT);
}
}
}
}
}
}
Problems Encountered
Make noise when the ball hits the side.
Play music for the winning side.
Instead of using one-light paddles on either side, we changed the values so that the paddles light up two LEDs at one time n stuff. We also had to change the analog values so that instead of it using pins 0-5, it now uses 0-4 because we used val+1, making it light up the original pin and the next one in succession, and you can't light up pins 5 and 6 when there is no pin 6 n stuff.
The blog has not been updated since the end of break, but we still have been making progress... n stuff. We fit all the LEDs through the plywood board that were strung to wires to make them easier to attach to the breadboard. We also drilled holes on either side of the "screen" to insert the potentiometers as controllers. We used knobs from an old television's volume and channel controls to put on the knobs of the potentiometers to make them easier to twist. Henderson is currently working on attaching the LEDs into the new breadboard, while Ryan and Mike are polishing off the blogs and comments on the programming. We expect to have the wires fully attached and Pong completely working on the new playing board by the end of next week.
What we would like to do
Add different colored LEDs
Cut the frame better
Paint the board a different color
Add music for the winning team.