Introduction: PONG WITH ARDUINO - ARDUINO PONG

You need some components: (Sorry i dont talk english)

Tu necesitaras los siguientes componentes:

  • An ARDUINO UNO R3
  • A Dot Matrix Display P10
  • A 10K Potenciometer
  • A Buzzer
  • Jumper Wires
  • Arduino Software

Step 1: SCHEMATICS AND SKETCH

The circuit Is very simple; you need a potenciometer to move the paddle and a buzzer for emitting sounds when the ball is bounce off

sketch for ARDUINO UNO is here, make sure install all libraries:

Es muy simple armar el circuito, se utiliza un potenciometro para mover la paleta y un buzzer para emitir sonidos cada vez que la pelota rebota.

El código para cargar en arduino es el siguiente; asegúrate de tener instaladas las librerías necesarias:

  • TimerOne.h
  • DMDMaster.h
  • SPI.h
/*
//JUEGO PONG CON ARDUINO UNO Y MATRIZ LED 16X32 P10
//MAS INFORMACION LA ENCUENTRAS EN MI BLOG:
//dinoelectro.blogspot.com
//
//PENDIENTE:
//   MARCADOR DE PUNTAJE
//   MODO DE DOS JUGADORES
//
//CONEXIONES:
//  ARDUINO________________DMD
//  PIN9___________________OE
//  PIN6___________________A
//  PIN7___________________B
//  PIN13__________________SLK
//  PIN8___________________SCLK
//  PIN11__________________SPI
//  CANAL A0_______________Pot 10K
//  PIN5___________________Zumbador
*/


#include <DMD.h>
#include <TimerOne.h>
#include "SystemFont5x7.h"


int width=31,height=15; //DIMENSION DEL AREA DE JUEGO 
int x1=width/2,y1=height/2,speedx=1,speedy=1; //POSICION Y VELOCIDAD DE LA BOLA
int paddlex=2,paddley=height/2,paddleh=3,paddles=1; //POSICION ANCHURA Y VEOCIDAD DE LA PALETA
DMD display(1,1); 


void ScanDMD()
{ 
   display.scanDisplayBySPI();
}


void setup() {
   Timer1.initialize( 3000 );           
   Timer1.attachInterrupt(ScanDMD);    
   pinMode(5, OUTPUT); //aqui conectamos el zumbador
  // welcomeScreen();
}


void loop(){
   delay(50);
   display.clearScreen(true);
   analogWrite(5, 0); //APAGO EL SONIDO DE REBOTE
   display.writePixel(x1,y1,GRAPHICS_NORMAL,1); //DIBUJA LA PELOTA EN EL CENTRO
   x1=x1+speedx; //MUEVE LA PELOTA EN LA DIRECCION X
   y1=y1+speedy; //MUEVE LA PELOTA EN LA DIRECCION Y
   if(x1>=width){
    speedx=-speedx;//SI LA PELOTA TOCA EL LADO LATERAL CAMBIA DE DIRECCION
    analogWrite(5, 20); //EMITE SONIDO DE REBOTE
    }else if(x1<=0){
      speedx=-speedx;//SI LA PELOTA TOCA EL LADO LATERAL CAMBIA DE DIRECCION
      analogWrite(5, 20); //EMITE SONIDO DE REBOTE
      }
  if(y1>=height){
    speedy=-speedy;//SI LA PELOTA TOCA EL LADO SUPERIOR CAMBIA DE DIRECCION
    analogWrite(5, 20); //EMITE SONIDO DE REBOTE
    }else if(y1<=0){
      speedy=-speedy;//SI LA PELOTA TOCA EL LADO SUPERIOR CAMBIA DE DIRECCION
      analogWrite(5, 20); //EMITE SONIDO DE REBOTE
      }
    paddley=map(analogRead(A0),0,1023,0,12);  
    //GRAFICAMOS LA PALETA EN LA POSICION TOMANDO COMO REFERENCIA LA LECTURA DEL
    //POTENCIOMETRO
    display.drawLine(paddlex,paddley,paddlex,paddley+paddleh,GRAPHICS_NORMAL);   
    //SI LA PELOTA TIENE CONTACTO CON LA PALETA, CAMBIA DE DIRECCION
    if(x1==paddlex && y1<=paddley+paddleh && y1>paddley-paddleh/3){
      speedx=-speedx;
      speedy=-speedy;
      analogWrite(5, 20); //EMITE SONIDO DE REBOTE
      } else if(x1==0){
      //SI LA PELOTA ALCANZA LA POSICION X=0, EL JUEGO TERMINA
      //ESCRIBE GAME OVER
      analogWrite(5, 0); //APAGO
      SONIDO GAME OVER
      display.clearScreen(true);
      display.selectFont(System5x7);                     
      display.drawString(5,0,"GAME",4, GRAPHICS_NORMAL); 
      display.drawString(5,9,"OVER",4, GRAPHICS_NORMAL);  
      delay( 2000 );
      //REINICIA VARIABLES 
      x1=width/2;
      y1=height/2;
      paddlex=2;
      paddley=height/2;
      display.clearScreen(true);
      //ESCRIBE PONG DUINO
      display.drawString(5,0,"PONG",4,  GRAPHICS_NORMAL);
      display.drawString(1,9,"DUINO",5, GRAPHICS_NORMAL); 
      delay(2000);
      display.clearScreen(true);
      //ESCRIBE "READY" 
      display.drawString(2,4,"READY",5,  GRAPHICS_NORMAL);        
      delay(2000);
      display.clearScreen(true);
      //ESCRIBE GO!!!
      display.drawString(5,4,"GO!!!",5,  GRAPHICS_NORMAL);        
      delay(500);
      }
      }

Step 2: PHOTOS

im going to make a box

necesitaré hacer una caja:

Step 3: Further More to Make...

  • Pong Scoreboard
  • Two players mode
  • build a box
  • Marcador Puntaje
  • Modo dos jugadores
  • hacer una caja

more info: digitalplanet

Thank you!

Gracias!

Comments

author
ahmet_024102 made it!(author)2017-06-27

if 96*32 p10 led panel how is program code ?

author
raulb32 made it!(author)2017-06-29

you must to change:

DMD display(1,1);

for this;

#define DISPLAYS_ACROSS 3

#define DISPLAYS_DOWN 2

DMD display(DISPLAYS_ACROSS, DISPLAYS_DOWN);

author
rquinteros made it!(author)2017-06-29

you must to change

DMD display(1,1);//

for this:

#define DISPLAYS_ACROSS 3

#define DISPLAYS_DOWN 2

DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);

author
msameer39 made it!(author)2017-06-25

Super cool

author
raulb32 made it!(author)2017-06-25

thank you and best regards

About This Instructable

491views

9favorites

License:

More by raulb32:PONG WITH ARDUINO - ARDUINO PONGVUMETRO CON ARDUINO Y MICROFONO ELECTRETAnalizador De Espectro Con ARDUINO Y WINAMP
Add instructable to: