Haz un juego de Arduino basado en el controlador SNES: 8 pasos

Haz un juego de Arduino basado en el controlador SNES: 8 pasos

Tabla de contenido:

Anonim

En este instructivo, te mostraré cómo tomar un controlador SNES, conectarlo a un Arduino y hacer un juego simple de Simon Says.

Esto podría usarse para crear un juego más complejo, o tal vez incluso para intentar crear una miniconsola basada en Arduino. Eventualmente, obtendré un video del juego en acción, pero no sé cuándo.

Suministros:

Paso 1: Materiales Necesarios

Los materiales necesarios son los siguientes:

-1 Arduino

-1 panadero pequeño

-1 antiguo controlador SNES que no te importaría romper

-10-15 cables de puente (uso 11)

-5 LEDs

-cinta

Paso 2: Conecta todos los cables para el Arduino

Conecte los cables de puente en los pines 2-9 en el arduino. Vea a continuación para ver qué hace cada pin, junto con mi combinación de colores recomendada.

Pin 2: Pin Strobe. Se conecta al cable naranja del controlador, por lo que haría que el Jumper sea Pink o Orange.

Pin 3: Pin del reloj. Se conecta al cable amarillo del controlador, por lo que recomiendo un puente amarillo.

Pin 4: Pin de datos. Cable rojo en el controlador, por lo que un puente rojo sería mejor.

Pin 5: Potencia para led superior.

Pin 6: Potencia para led derecho.

Pin 7: Potencia para led inferior.

Pin 8: Potencia para led izquierdo.

Los pines 5-8 deben tener cable de puente del mismo color. Elijo el verde oscuro.

Pin 9: Potencia para indicador de juego led. Utilicé verde claro.

5 V: pin de alimentación, se conecta al cable blanco del controlador, así que usé un puente blanco.

GND: cable marrón del controlador, usé un puente negro.

GND: se usa para conectar todas las conexiones a tierra desde el tablero hasta el arduino, uso azul para todos los cables de tierra.

Paso 3: Configuración de LEDs y Breadboard

Coloca tus LEDs en el tablero en forma de diamante. Asegúrese de que no haya 2 pines LED que compartan la misma fila numerada. Conecte todos los cátodos (pines cortos en leds) a las líneas de tierra de su tablero de pan, luego enganche su línea de tierra a una de las GND en el arduino. Conecte los puentes en los Pines 5-8 a los ánodos de sus LED, correspondientes a su posición, como se indica en el último paso.

Para el indicador LED del juego, simplemente colóquelo lejos de los demás, conecte su ánodo al Pin 9 y su cátodo a la baranda de tierra.

Paso 4: Conectar el controlador

Hasta este punto, no ha tenido que meterse con el controlador en absoluto. Ahora, tienes que cortar la cubierta de plástico del extremo del cable, para que puedas llegar a los cables que están dentro. Deben tener algunos pequeños extremos metálicos (consulte las imágenes), por lo que debería ser bastante sencillo conectar cables de puente, ¿verdad?

Incorrecto.

Primero pegue el cable del controlador al escritorio por el arduino. Si deja que se mueva, tendrá dificultades para hacer buenas conexiones. Los cables de mi puente se deslizan fuera de las pequeñas cosas de metal, así que tomé una navaja de bolsillo y separé los extremos (vea las fotos) para poder pegar el cable de puente perpendicular al conector. Cuando conecte los 5 cables al controlador, asegúrese de que no se toquen entre sí y de que está haciendo coincidir los colores correctamente.

Paso 5:

En este punto, debe tener todo correctamente conectado y listo para funcionar. Descarga el bosquejo de Arduino vinculado, compílalo, luego cárgalo a tu arduino. Para jugar, espere a que el indicador LED del juego deje de parpadear, luego use AXBY como las 4 direcciones cardinales. En los próximos pasos, intentaré explicar el código, pero si todo lo que quieres es un juego que funcione, puedes detenerte aquí.

Simon_Says_snes.ino

Paso 6: El Código, Parte 1

Primero un poco de historia sobre cómo el controlador envía datos. Para recibir los datos del controlador, establece el pin estroboscópico en alto, luego lee su primer bit de datos (el bit menos significativo). Para obtener el segundo bit, debe alternar el pin del reloj y luego leer el pin de datos. Sigues haciendo esto 16 veces. El estado del controlador es un número de 2 bytes, con los 12 bytes menos significativos que contienen los botones que se están presionando actualmente y los 4 bytes más significativos que son inútiles.

Así que las primeras 7 líneas son bastante simples, porque solo asignan nombres a los 3 pines del controlador y al pin indicador del juego.

Las líneas 8-20 declaran los datos hexadecimales utilizados para detectar qué botón se presiona en el controlador. Cada valor hexadecimal activa un bit separado en el flujo de datos, de modo que de esa manera solo puede usar desplazamientos de bits para determinar si se presiona un botón determinado, o simplemente use un bit y.

La variable 'matriz' es solo una matriz de enteros que tiene 30 pulgadas de longitud. Esto almacena la secuencia de prensas para el juego.

'pos' es una variable de posición. Más sobre eso más adelante.

'timeForPress' es el tiempo que tienes que presionar los botones.

El siguiente es el método de configuración (). Comenzamos sembrando el generador de números aleatorios y luego configurando el modo de pin para cada uno de los pines 2-9. A continuación, abrimos la comunicación en serie, para fines de depuración, y configuramos la secuencia de botones en todos los '4'. Hice este b / c, el sistema de numeración para los LED solo sube a 3, por lo que el 4 es esencialmente solo un marcador de posición. Ahora configuramos timeForPress en 1000 y llamamos al método genSequence (), que llena nuestra matriz con números enteros aleatorios entre 0 y 3 (inclusive). A continuación, establece nuestra posición en 0, para mostrar que aún no ha comenzado el juego, y luego parpadea el indicador del juego para mostrar que el juego está a punto de comenzar.

Paso 7: El Código, Parte 2

En este paso, cubriré rápidamente los métodos utilizados para obtener datos del controlador. Les dije la teoría en el paso anterior, pero ahora estableceré las llamadas a funciones reales.

Creo que obtuve un poco de este código de este instructivo. Aunque no del todo seguro.

Hay tres métodos utilizados para verificar la entrada del controlador:

botones()

luz estroboscópica

desplazar en()

El método de los botones () configura primero una variable de retorno y un contador de lugar. Luego destella (usando strobe ()), y entra en un bucle for (). En el bucle for, lee y almacena los datos un bit a la vez utilizando el método shiftin () y los operadores a nivel de bits.

El método strobe () es bastante sencillo. Básicamente, simplemente establece el pin estroboscópico en ALTO, luego inmediatamente vuelve a BAJO. Cosas bastante simples. Esto le dice al controlador que comience a transmitir datos.

El método shiftin () en realidad lee los datos. Toma los datos del pin de datos, luego alterna el pin de reloj, que le dice al controlador que envíe el siguiente bit.

Usando solo estos tres métodos, puede leer el estado del controlador. Nunca deberías tener que llamar directamente a strobe () o shiftin (). En una nota final, al verificar si se está presionando un botón, debe usar 2 operadores a nivel de bits. La ~ (tilde) es un bit no, e invierte los datos, luego el & comprueba el estado frente al botón que quiera presionar.

Paso 8: El Código, Parte 3

Este es el paso final sobre el código. Voy a analizar rápidamente el funcionamiento del bucle de juego, ya que debería ser bastante fácil de seguir para un programador novato.

El método loop () comienza imprimiendo en serie el estado del controlador. Luego reproduce la secuencia almacenada en la matriz, luego verifica la entrada del usuario con el método readAndCheckInput, que esencialmente es solo un bucle for con algunas declaraciones if en él. Si se equivoca, se sale del bucle y la cosa que parpadea termina.

Supongo que eso significa que este tutorial ha terminado! Si ustedes hacen algunos juegos geniales, por favor comenten y pongan una foto, ¡me encantaría verlos!

¡Buena suerte!