Minijuego PING PONG usando un TELÉFONO en ARDUINO


p4.jpg

Video

En esta práctica programaremos el minijuego de ping pong en un Arduino UNO, utilizando como interfaz gráfica un teléfono Android con una vinculación vía Bluetooth. Arma tu propio ping pong minijuego en arduino usando como tablero tu teléfono android. Crea tu juego de pong en poco tiempo, que es fácil de hacer!!!!.

- Materiales:


Para realizar el circuito necesitas:

• 1 Arduino UNO,
• 5 LEDs rojos,
• 2 LEDs amarillos,
• 2 LEDs verdes,
• 5 LEDs rojos,
• 9 Resistencias de 220 ohms,
• 2 resistencias de 10k,
• 1 módulo bluetooth HC-06,
• 1 fuente de alimentación de 5v,
• 1 Protoboard y Jumpers.

- Código


Comenzamos el desarrollo del programa definiendo los pines digitales de los LEDs y de los pulsadores. Para identificar el color de los leds dentro del código, las variables las llamaremos conforme al color.

int pulseleft = 2;
int pulseright = 3;
int verdeleft = 4;
int amarillo1 = 5;
int rojo2 = 6;
int rojo3 = 7;
int rojo4 = 8;
int rojo5 = 9;
int rojo6 = 10;
int amarillo2 = 11;
int verderight = 12;

Después iniciaremos variables para el almacenamiento de datos leídos desde los pulsadores, y los necesarios para el bluetooth, como los millis y para obtener el carácter mandado por Android.

//valores pulsadores
int valleft;
int valright;
int direccion_der = 1;
int direccion_izq = 0;
int aux = 4, vel = 400;
//marcador
int player1 = 0;
int player2 = 0;
//timer
unsigned long tiempo;
unsigned long interval = 300;
unsigned long previousMillis;
unsigned long currentMillis;
int i = 4;
//bluetooth
char myChar;
int mode=1;

En la función setup() pondremos los leds como pines de salida y los pulsadores como entradas, iniciaremos el puerto serial a 9600 baudios y empezaremos el primer millis.

void setup() {
pinMode(verdeleft, OUTPUT);
pinMode(verderight, OUTPUT);
pinMode(amarillo1, OUTPUT);
pinMode(rojo2, OUTPUT);
pinMode(rojo3, OUTPUT);
pinMode(rojo4, OUTPUT);
pinMode(rojo5, OUTPUT);
pinMode(rojo6, OUTPUT);
pinMode(amarillo2, OUTPUT);

pinMode(pulseleft, INPUT);
pinMode(pulseright, INPUT);
Serial.begin(9600);
previousMillis = millis();
}

En la función loop() estructuraremos la lógica del modo “stand by” del minijuego y la lectura del puerto serial por si obtiene el carácter “a” para cambiar al modo GAME.

void loop() {
currentMillis = millis();
tiempo = currentMillis - previousMillis;
if (tiempo >= interval) {
digitalWrite(i - 1, LOW);
digitalWrite(i, HIGH);
digitalWrite(i + 1, LOW);
i++;
previousMillis = millis();
if (i == 14) {
i = 4;
}
}

while (Serial.available()) {
myChar = Serial.read();
if (myChar == 'a') {
digitalWrite(i - 1, LOW);
digitalWrite(i, LOW);
digitalWrite(i + 1, LOW);
delay(2000);
mode=1;
aux=4;
direccion_der = 1;
direccion_izq = 0;
i=4;
GAME();
}
}

}

Las funciones GAME() y PELOTA() puedes verlas en el código y obtener más información en el video explicativo de esta práctica.
void GAME() {
while (mode==1) {
valleft = digitalRead(pulseleft);
valright = digitalRead(pulseright);
if (aux == 2 && valleft == 1) {
aux++;
direccion_der = 1;
direccion_izq = 0;
player1++;
Serial.print(player1);
Serial.print(" - ");
Serial.print(player2);
Serial.println("#");
PELOTA();
vel = vel - 50;
}
else if (aux == 9 && valright == 1) {
aux--;
direccion_der = 0;
direccion_izq = 1;
player2++;
Serial.print(player1);
Serial.print(" - ");
Serial.print(player2);
Serial.println("#");
PELOTA();
}
else if (direccion_der == 1) {
aux++;
PELOTA();
}
else if (direccion_izq == 1) {
aux--;
PELOTA();
}
delay(vel);
}
}

void PELOTA() {
switch (aux) {
case 1: //pierdes el juego
digitalWrite(verdeleft, HIGH);
digitalWrite(amarillo1, LOW);
break;
case 2: //amarillo izquierda
digitalWrite(verdeleft, LOW);
digitalWrite(amarillo1, HIGH);
digitalWrite(rojo2, LOW);
break;
case 3:
digitalWrite(amarillo1, LOW);
digitalWrite(rojo2, HIGH);
digitalWrite(rojo3, LOW);
break;
case 4:
digitalWrite(rojo2, LOW);
digitalWrite(rojo3, HIGH);
digitalWrite(rojo4, LOW);
break;
case 5:
digitalWrite(rojo3, LOW);
digitalWrite(rojo4, HIGH);
digitalWrite(rojo5, LOW);
break;
case 6:
digitalWrite(rojo4, LOW);
digitalWrite(rojo5, HIGH);
digitalWrite(rojo6, LOW);
break;
case 7:
digitalWrite(rojo5, LOW);
digitalWrite(rojo6, HIGH);
digitalWrite(amarillo2, LOW);
break;
case 8://amarillo derecha
digitalWrite(rojo6, LOW);
digitalWrite(amarillo2, HIGH);
digitalWrite(verderight, LOW);
break;
case 9://pierdes el juego
digitalWrite(amarillo2, LOW);
digitalWrite(verderight, HIGH);
break;

default:
digitalWrite(verdeleft, HIGH);
digitalWrite(verderight, HIGH);
delay(3000);
digitalWrite(verdeleft, LOW);
digitalWrite(verderight, LOW);
mode=2;
player1=0;
player2=0;
Serial.print(player1);
Serial.print(" - ");
Serial.print(player2);
Serial.println("#");
break;
}
}


- Instrumentación


Colocaremos todos los LEDs haciendo una línea, en los extremos pondremos los leds verdes, seguidos de los amarillos y en medio pondremos todos los rojos. Conectamos los ánodos con las resistencias y está conectada a los pines digitales de la placa y los cátodos conectados a la tierra del Arduino.

Los pulsadores los pondremos en los extremos de cada lado de la protoboard. En cada pulsador, conectaremos una de las patas a 5v y el otro haremos un nodo donde estará una pata de la resistencia de 10k y el puente donde lo conectaremos al pin digital de Arduino. El extremo que falta por conectar de la resistencia lo pondremos en GND.

Para el HC-06, la patilla Vcc va a 5v, GND con GND común del Arduino, RXD va al pin 1 del Arduino, es el pin TX de la placa, y la patilla TXD del módulo lo conectamos al pin 0. Con esto terminamos la instrumentación. Podemos ver que del pin digital 0 al 12 están ocupados. Compilamos y subimos programa para ver resultados.

DESCARGAS


LINK DE DESCARGA

Imágenes

p4.jpg
p4-2.jpg
p4-3.jpg

APRENDE LO QUE NECESITAS

NUESTROS CURSOS


cursoarduinoyandroid.jpg

Creación de un HMI en Android Studio y Arduino

Nivel: Básico 2 horas y 30 min (146 min.)

Diseña, maqueta y programa un HMI completo en Android Studio vinculado a un Arduino mediante Bluetooth.

cursodispensadorautomatico.jpg

CONSTRUYE un DISPENSADOR AUTOMÁTICO CASERO sin ARDUINO desde CERO

Nivel: Básico 27 minutos

Construye desde cero un dispensador automático casero sin Arduino desde cero, utilizando pura electrónica.

cursocarritorobot4wd.jpg

Creación de carrito robot desde cero usando mando de PS4

Nivel: Básico 2 horas y 19 min (139 min.)

Construye desde cero un carrito robot con arduino manipulado por un control de PS4 y un teléfono Android.