LED-Roulette-Spiel
Komponenten und Verbrauchsmaterialien
| × | 9 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Notwendige Werkzeuge und Maschinen
|
Apps und Onlinedienste
|
Über dieses Projekt
Video:
Übersicht
Schon seit einiger Zeit wollte ich ein einfaches, aber unterhaltsames Spiel entwickeln, das nur von einer Person gespielt werden muss. Es ist extrem einfach, es wird nur ein Arduino Nano benötigt. Es ist LED-Roulette. Das Ziel des Spiels besteht darin, auf der grünen LED anzuhalten und die roten und gelben zu vermeiden. Scheint einfach zu spielen und zu machen, und das ist es auch.
Schritt 1
Zuerst begann ich mit dem Entwerfen des Geräts in Fusion 360. Ich entwarf die Frontplatte so, dass sie 9 LEDs enthält, 6 rote, 2 gelbe und 1 grüne. Ich habe auch einen Platz für einen Taktschalter gemacht, um unten zu gehen. Ich benutzte dann meinen Millright CNC-Router, um die von mir entworfenen Stücke auszuschneiden.
Schritt 2
Die Spielmechanik funktioniert so:Ein Licht "bewegt" sich zwischen den beiden Kanten hin und her und stoppt, wenn eine Taste gedrückt wird. Damit es sofort reagiert, habe ich einen Interrupt verwendet. Jede LED entspricht einem Index in einem Array, das zyklisch durchlaufen wird. auch der aktuelle LED-Index bekommt eine eigene Variable. Es gibt auch eine Verzögerung zwischen jedem Schritt, entsprechend der Schwierigkeit. Beim Start wählt der Benutzer den Schwierigkeitsgrad durch Drücken der Taste aus, um die Verzögerung zwischen jedem Wechsel der LED zu reduzieren. Nachdem die richtige LED aufleuchtet, kann der Benutzer zum Sperren doppelklicken.
Schritt 3
Ich benutzte etwas Sandpapier, um den Sperrholzstücken ein schönes Finish und eine Rundung zu verleihen. Danach habe ich Heißkleber verwendet, um die Stücke zusammen zu befestigen.
Schlussfolgerungen
Wenn ich jetzt Lust habe, ein einfaches Spiel zu spielen, sei es für unterwegs oder einfach nur, um vom Bildschirm wegzukommen, gibt mir dieses Gerät eine wunderbare Atempause. Ich kann es auch im Mehrspielermodus machen, indem ich jede LED um eine bestimmte Anzahl von Punkten von Grün abweiche, sodass die Person gewinnt, die am Ende die wenigsten Punkte hat.
Code
- Code
CodeC/C++
/*Pins 2-10 verwendenDie TTBOUNCE-Bibliothek erhalten Sie hier: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 Schwierigkeit =0;uint8_t current_led =0;bool dir_flag =true; // true geht nach rechts, false geht nach linksbool game_ended =false;bool is_win =false;bool is_finished_selecting =false;TTBOUNCE b =TTBOUNCE (Schaltfläche);void doubleClick () { Serial.println ( "Doppelklick"); ist_fertige_Auswahl =wahr; delay_time =floor(500/(Schwierigkeit+1)); // Formel:Verzögerung (in ms) =500 / (Schwierigkeit + 1) Serial.println ( "Schwierigkeit:" + String (delay_time)); Sweep ();} ungültiger Klick () { Serial.print ( "Klick | "); digitalWrite (led_array[Schwierigkeit], NIEDRIG); Schwierigkeit++; Wenn (Schwierigkeit> 8) {Schwierigkeit =0; } digitalWrite (led_array[Schwierigkeit], HIGH); Serial.println("Schwierigkeit ist:"+String(Schwierigkeit)); Verzögerung (100);}void setup () { Serial.begin (9600); b.attachDoubleClick(doubleClick); b.attachClick (klicken); b.setActiveLow(); b.enablePullup(); for(int i=0;i<9;i++){pinMode (led_array[i], OUTPUT); } Sweep(); Impuls(); Schwierigkeit =0; digitalWrite (led_array[Schwierigkeit], HOCH); while(!is_finished_selecting){ b.update(); } b.update(); pinMode (Schaltfläche, INPUT_PULLUP); attachInterrupt (digitalPinToInterrupt (Schaltfläche), button_pressed, FALLING); delay(1000);}void loop(){ if(game_ended==false){ move_led(); Verzögerung (Verzögerungszeit); aufrechtzuerhalten. Sonst if (game_ended) {Serial.println (game_ended); Serial.println ("Spiel vorbei"); if (is_win) {Serial.println ( "Sie haben gewonnen"); for(int i=0; i<5;i++){puls(); Verzögerung (100); } } Sweep(); game_ended =false; is_win =falsch; Verzögerung (2000); }}void move_led () { digitalWrite (led_array [current_led], LOW); if (current_led ==8) { dir_flag =false; aktuelle_led -=1; aufrechtzuerhalten. Sonst if (current_led ==0) { dir_flag =true; aktuelle_led +=1; aufrechtzuerhalten. Sonst if (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); } Verzögerung (100); for(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); Verzögerung (50); digitalWrite(led_array[i], LOW); } for(int i=8; i>=0;i--){digitalWrite(led_array[i], HIGH); Verzögerung (50); digitalWrite(led_array[i], LOW); }}void button_pressed () { Serial.println ( "Taste auf LED gedrückt:"+ String (current_led)); game_ended =wahr; if(current_led==4){ is_win =true; } else if(current_led !=4){ is_win =false; } aktuelle_led =0; Verzögerung(500);}
Schaltpläne
Herstellungsprozess
- Arduino-Gyroskop-Spiel mit MPU-6050
- Arduino Digital Dice
- DIY 37 LED-Roulette-Spiel
- Arduino-Gamecontroller
- Arduino Nano Tetris-Spiel auf hausgemachter 16x8-Matrix
- Arduino mit Bluetooth zur Steuerung einer LED!
- Arduino-Vierbeiner
- Pixel-Chaser-Spiel
- Steuerung der LED-Helligkeit mit Bolt und Arduino
- Einzelne LED-Matrix-Arduino Flip Clock