Juego de ruleta LED
Componentes y suministros
| × | 9 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Herramientas y máquinas necesarias
|
Aplicaciones y servicios en línea
|
Acerca de este proyecto
Video:
Descripción general
Durante bastante tiempo he querido crear un juego simple pero divertido que solo requiere una persona para jugar. Es extremadamente simple, solo necesita un Arduino Nano para ejecutarlo. Es una ruleta LED. El objetivo del juego es detenerse en el LED verde, evitando los rojos y amarillos. Parece fácil de jugar y hacer, y lo es.
Paso 1
Primero, comencé diseñando el dispositivo en Fusion 360. Diseñé la placa frontal para contener 9 LED, 6 rojos, 2 amarillos y 1 verde. También hice un espacio para que un interruptor de tacto fuera en la parte inferior. Luego utilicé mi enrutador CNC Millright para cortar las piezas que diseñé.
Paso 2
La mecánica del juego es la siguiente:una luz se "moverá" hacia adelante y hacia atrás entre los dos bordes y se detendrá cada vez que se presione un botón. Para que reaccionara de inmediato, utilicé una interrupción. Cada LED corresponde a un índice en una matriz que se recorre. el índice LED actual también obtiene su propia variable. También hay un retraso entre cada paso, correspondiente a la dificultad. Al inicio, el usuario selecciona la dificultad presionando el botón para reducir el retraso entre cada cambio de LED. Una vez que se enciende el LED correcto, el usuario puede hacer doble clic para bloquearlo.
Paso 3
Usé un poco de papel de lija para agregar un buen acabado y redondeo a las piezas de madera contrachapada. Después de eso, usé pegamento caliente para unir las piezas.
Conusiones
Ahora, cuando tengo ganas de jugar un juego simple, ya sea para viajar o simplemente para alejarme de una pantalla, este dispositivo me brinda un respiro maravilloso. También puedo convertirlo en multijugador haciendo que cada LED se aleje del verde una cierta cantidad de puntos, lo que hace que la persona que obtuvo la menor cantidad de puntos al final gane.
Código
- Código
Código C / C ++
/ * Use los pines 2-10 Puede obtener la biblioteca TTBOUNCE aquí:https://github.com/TOLDOTECHNIK/TTBOUNCE*/#includeint delay_time =0; const uint8_t led_array [9] ={ 4,3,5,6,7,8,9,10,11}; const uint8_t button =2; uint8_t dificultad =0; uint8_t current_led =0; bool dir_flag =true; // verdadero va a la derecha, falso va a la izquierda bool game_ended =false; bool is_win =false; bool is_finished_selecting =false; TTBOUNCE b =TTBOUNCE (button); void doubleClick () {Serial.println ("doble clic"); is_finished_selecting =true; delay_time =piso (500 / (dificultad + 1)); // Fórmula:retraso (en ms) =500 / (dificultad + 1) Serial.println ("dificultad:" + String (delay_time)); sweep ();} void click () {Serial.print ("Click |"); digitalWrite (led_array [dificultad], BAJA); dificultad ++; if (dificultad> 8) {dificultad =0; } digitalWrite (led_array [dificultad], ALTA); Serial.println ("La dificultad es:" + String (dificultad)); delay (100);} void setup () {Serial.begin (9600); b.attachDoubleClick (doubleClick); b.attachClick (clic); b.setActiveLow (); b.enablePullup (); para (int i =0; i <9; i ++) {pinMode (led_array [i], SALIDA); } barrer(); legumbres(); dificultad =0; digitalWrite (led_array [dificultad], ALTA); while (! is_finished_selecting) {b.update (); } b.update (); pinMode (botón, INPUT_PULLUP); attachInterrupt (digitalPinToInterrupt (botón), button_pressed, FALLING); delay (1000);} bucle vacío () {if (game_ended ==false) {move_led (); delay (delay_time); } else if (game_ended) {Serial.println (game_ended); Serial.println ("Fin del juego"); if (is_win) {Serial.println ("usted ganó"); para (int i =0; i <5; i ++) {pulso (); retraso (100); } } barrer(); game_ended =falso; is_win =falso; retraso (2000); }} void move_led () {digitalWrite (led_array [current_led], LOW); if (current_led ==8) {dir_flag =false; current_led - =1; } más si (led_actual ==0) {bandera_dir =verdadero; current_led + =1; } más si (dir_flag) {current_led + =1; } else if (! dir_flag) {current_led - =1; } digitalWrite (led_array [current_led], HIGH);} void pulse () {for (int i =0; i <9; i ++) {digitalWrite (led_array [i], HIGH); } retraso (100); para (int i =0; i <9; i ++) {digitalWrite (led_array [i], LOW); }} void sweep () {for (int i =0; i <9; i ++) {digitalWrite (led_array [i], HIGH); retraso (50); digitalWrite (matriz_de_ led [i], BAJA); } para (int i =8; i> =0; i -) {digitalWrite (led_array [i], HIGH); retraso (50); digitalWrite (matriz_de_ led [i], BAJA); }} void button_pressed () {Serial.println ("Botón presionado en LED:" + String (current_led)); game_ended =true; if (current_led ==4) {is_win =true; } else if (current_led! =4) {is_win =false; } current_led =0; retraso (500);}
Esquemas
Proceso de manufactura
- Juego de giroscopio Arduino con MPU-6050
- Dados digitales Arduino
- Juego de ruleta DIY 37 LED
- Controlador de juego Arduino
- Arduino Nano Tetris Game en una matriz casera de 16x8
- ¡Arduino con Bluetooth para controlar un LED!
- Arduino Cuadrúpedo
- Pixel Chaser Game
- Control del brillo del LED usando Bolt y Arduino
- Reloj Flip Arduino de matriz de un solo LED
- Mezclador de colores Arduino RGB